首页 > 其他分享 >StencilJs学习之事件

StencilJs学习之事件

时间:2023-06-20 11:33:24浏览次数:42  
标签:DOM StencilJs 学习 事件 todoCompleted 组件 todo Event

其实并没有所谓的 stencil Event,相反 stencil 鼓励使用 DOM event。然而,Stencil 提供了一个 API 来指定组件可以触发的事件,以及组件监听的事件。 这是通过 Event()和 Listen()装饰器实现的。

Event 装饰器

组件可以使用事件发射器装饰器发送数据和事件。

要将自定义 DOM 事件分发给其他组件处理,可以使用@Event()装饰器。

import { Event, EventEmitter } from '@stencil/core';

...
export class TodoList {

  @Event() todoCompleted: EventEmitter<Todo>;

  todoCompletedHandler(todo: Todo) {
    this.todoCompleted.emit(todo);
  }
}

上面的代码将 dispatch 一个名为 todoCompleted 的自定义 DOM 事件。

EventOptions

interface EventOptions {
    /**
     * 自定义事件名称
     */
    eventName?: string;
    /**
     * 表明事件是否允许冒泡
     */
    bubbles?: boolean;

    /**
     * 表明事件是否允许取消
     */
    cancelable?: boolean;

    /**
     * 表示事件是否可以跨越shadow DOM和regular DOM的边界
     */
    composed?: boolean;
}

Listen 装饰器

Listen() 装饰器用于监听 DOM 事件,包括从 @Events 分发的事件。当组件从 DOM 中添加或删除时,事件监听器会自动添加或删除。

在下面的示例中,假设子组件 TodoList 使用 EventEmitter 触发 todoCompleted 事件。

import { Listen } from '@stencil/core';

...
export class TodoApp {

  @Listen('todoCompleted')
  todoCompletedHandler(event: CustomEvent<Todo>) {
    console.log('Received the custom todoCompleted event: ', event.detail);
  }
}

ListenOptions

interface ListenOptions {
    target?: "body" | "document" | "window"; // 如果target属性不设置值,则默认监听host(宿主元素)
    capture?: boolean;
    passive?: boolean;
}

使用组件的自定义事件

在 jsx 中使用

// 在stencilJs项目内使用
import { Event, EventEmitter } from '@stencil/core';

...
export class TodoList {

  @Event() todoCompleted: EventEmitter<Todo>;

  todoCompletedHandler(todo: Todo) {
    this.todoCompleted.emit(todo);
  }
}

常规使用

<todo-list></todo-list>
<script>
    const todoListElement = document.querySelector("todo-list");
    todoListElement.addEventListener("todoCompleted", (event) => {
        /* your listener */
    });
</script>

结束语

至此,我们已经基本把 StencilJs 的相关基础知识已经学习的差不多了,由于 stencilJs 使用的 tsx
来开发的,所以在下一章节中将会学习如何使用 tsx

标签:DOM,StencilJs,学习,事件,todoCompleted,组件,todo,Event
From: https://www.cnblogs.com/guojikun/p/17493166.html

相关文章

  • 解决PostgreSQL分组聚合时SELECT中字段必须在group或聚合函数中的问题(转自知乎仅供自
    PG的分组函数是比较严格的。你的select字段必须得存在于group子句、或者聚合函数中才行。假设场景是这样的:表结构name、class、score我现在要按照name分组,聚合score数据,还能查出额外的这个class字段如果是MySQL,你可以直接groupname然后selectclass,avg(score),但是你在P......
  • 【Qt5学习笔记】使用ui界面编一个入门级的小项目(保姆级教程,多图警告)
    前言我发现自己之前可能是有点走偏了,花了两天时间看书几乎一无所获,书上都是代码实现,还没有相应的注释…今天我用ui设计师界面来进行编程,写一个小界面。界面功能1.计算加法;2.可以弹窗;3.使用布局,美化界面;4.退出按钮;界面预览实现1.建立一个QtWidgetsApplication可以参考QT5项目......
  • python爬虫学习之定制请求头
    1.在Chrome浏览器中点击右键选择“检查”命令;2.打开后选择Network;3.按下ctrl+r,在其中找到需要请求的网站,单击后选择Headers;4.得到请求头信息为:Host:www.baidu.comReferer:https://www.baidu.com/?tn=98012088_2_dg&ch=7User-Agent:Mozilla/5.0(WindowsNT10.0;WOW64)A......
  • C++ primer plus学习之第二章
    1.引用:intival=1024;int&refval=ival;//正确,refval时ival的别名int&re;//错误,引用必须被初始化int&ii=42;//错误:不能为非常量引用绑定字面值constint&ii=42;//正确:可以为常量引用绑定字面值2.初始化空指针int*p=0;int*p=NULL;int*p=nullptr;//最好用这个任何非零指......
  • Python学习总结之三(if语句)
    1.其实Python和C语言中的if语句是极相似的,因为if语句的职能便是判断,区别如下:(1).Python(无括号,有冒号且缩进):ifcar=='byd':print(car.upper())(2).C(有括号,无冒号且缩进无意义):if(car=="byd")printf("%s",car);2.检查是否不相等:将“==”换为"!="即可。3.比较数字......
  • JavaScript学习 -- 对象的属性描述对象
    一、声明一个对象let对象={name:"公众号:编程有你",pwd:123456};二、输出对象属性的描述//console.log(Object.getOwnPropertyDescriptors(对象))获取多有属性console.log(Object.getOwnPropertyDescriptor(对象,'name'))获取指定的属性三、运行结果:writable:true, ......
  • python字典学习(4th)
    好久没写博客了,一方面是建模校赛的开展,另一个就是随着课程的进行,难度也在不断加大,最近一直在温习功课以应对考试。话不多说,开始总结。1.字典由‘{}’包含,其中都是一些键-值对,例如:xxx={'people':'cql','age':18}2.访问值时使用xxx['people']3.添加键-值对:xxx={'people':'cql','age......
  • 华大电子MCU CIU32M010、CIU32M030嵌入式闪存及中断和事件
    1.嵌入式闪存1.1模块介绍CIU32M010、CIU32M030集成了嵌入式FLASH控制模块,该模块控制FLASH的擦除、编程以及读取数据。上电时会从FLASH中读取相关数据进行校验以及初始化配置,保证芯片程序在正确且安全的情况下运行。1.2功能特点•支持高达64K主闪存空间的FLASH•......
  • 集装箱吊车门机起重机电气电器图纸一套这是调试后的最终版图纸,含程序,元件清单,集装箱的
    集装箱吊车门机起重机电气电器图纸一套这是调试后的最终版图纸,含程序,元件清单,集装箱的,供学习参考用,这是电气图纸,没有机械的。plc是315-2dp,行车图纸有很多,串电阻的,各种变频,plc通讯的这套图纸是集装箱吊车门机起重机的电气图纸,经过调试后成为最终版本。图纸包含了程序、元件清单以及......
  • Min-25 筛学习笔记
    Min-25筛学习笔记\(\text{ByDaiRuiChen007}\)一、简要介绍Min-25筛,是一种能在亚线性时间内求出特定的一类积性函数\(f(i)\)的前缀和的算法。具体来说,Min-25筛可以在\(\mathcalO(\sqrtn)\)的空间复杂度与\(\mathcalO(\dfrac{n^{3/4}}{\logn})\)的时间复杂度内求......