StencilJs学习之事件

这篇具有很好参考价值的文章主要介绍了StencilJs学习之事件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

其实并没有所谓的 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文章来源地址https://www.toymoban.com/news/detail-491778.html

到了这里,关于StencilJs学习之事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx http 499,其实没有很可怕

            499作为nginx自定义的状态码,不像400、401、500、502等常见的http状态码,很多不太常用nginx的人可能并不能清楚理解他的含义,本文将简单介绍一下499状态码的含义,以及出现后的排查和处理思路,以及proxy_ignore_client_abort参数是否能有效。         nginx 对499的定

    2024年02月03日
    浏览(39)
  • 通过C++发布一个web api服务器,其实没有想象的难,一个库就够了

      为了实现一个包含静态文件输出、GET、POST 请求处理(含参数读取)、文件上传和下载功能的 Web API 服务,我们将使用  cpp-httplib 作为 HTTP 服务器库。首先,确保你已经安装了该库。 下面是一个简单的示例代码,演示如何使用  cpp-httplib 创建一个包含上述功能的 Web API 服

    2024年02月04日
    浏览(46)
  • 电压和电流反馈判别及例子,绝对让你通透,其实也没有那么难,一次就看懂!从此终于搞懂了电压反馈和电流反馈!

    一个简单粗暴的判断方法: 先看反馈是否直接连到Uo输出端(若不是直接从输出端引出,则为电流反馈) 再假设输出电压Uo为零,或者令负载电阻RL两端电压为0 ,然后看反馈信号是否存在。 若反馈信号不存在了,说明反馈信号与输出电压成比例,是电压反馈。 否则是电流反

    2024年02月09日
    浏览(41)
  • uniapp项目从Hbuilder Vscode运行到小程序模拟器 微信开发者工具后没有反应,进不去!其实保姆级答案只需要三步

    先看问题如下图:uniapp项目从Hbuilder 或者Vscode点击运行到小程序模拟器 微信开发者工具后没有反应,进不去 只能在最外面如下图: 如何解决: 如果不知道如何查看自己的微信小程序AppID请看我的另一篇文章,下方是文章链接 如何查看自己的appid以及在微信开发者工具中查看

    2024年02月11日
    浏览(104)
  • 如何在任何STM32上面安装micro_ros(貌似这个文章里面已经没有什么可以继续阻挡我的了,我有gitee和docker,虽然docker其实用不着)

    JMP推荐跳转到此篇文章==STM32CubeMX+micro_ros_stm32cubemx_utils库-CSDN博客 就我知道的:micro-ros只能在特定的昂贵的开发板上面运行,但是偶然发现了这个文章,似乎提供了一个全新的方式来在ros2和单片机之间通讯,如果能够这样肯定也能够提高效率,但即使不行,使用串口库也应该

    2024年02月22日
    浏览(40)
  • vue实现鼠标移入移出事件+解决鼠标事件没有反应

    鼠标移入移出事件代码 methods 这样一个简单的鼠标移入移出事件就完成了。 但是,我在我的标签中加上鼠标移出移入事件过后,并没有什么反应,在查阅了官方文档之后,才发现了加一个属性有可能就能解决这个问题:   即添加native属性即可解决:

    2024年02月12日
    浏览(40)
  • 【前端】vue实现鼠标移入移出事件+解决鼠标事件没有反应

    鼠标移入移出事件代码 methods 这样一个简单的鼠标移入移出事件就完成了。 但是,我在我的标签中加上鼠标移出移入事件过后,并没有什么反应,在查阅了官方文档之后,才发现了加一个属性有可能就能解决这个问题:   即添加native属性即可解决:

    2024年02月07日
    浏览(42)
  • 【Unity——模板测试Stencil】

    什么是模板测试,可以实现什么效果? ●用模板测试来实现限制渲染区域 ●使立方体的不同区域显示不同的画面 图片来自:TA入门笔记(十五) 模板测试的知识点 ●顺序 透明度测试-模板测试-深度测试 ●简单原理 图片来自:LearnOpenGL——模板测试 以文章开头第一张图为例

    2024年02月15日
    浏览(38)
  • js页面当中没有写回车事件,但是有回车效果

    前两天遇到一个问题,研究了我很差事件。问题如下: 页面只有一个文本框,没有写任何回车事件,但是点回车的时候,就会触发回车,回传页面。 于是各种google,终于有了结果: 如果表单里有一个type=”submit”的按钮,回车键生效。 如果  表单里只有一个type=”text”的

    2024年03月09日
    浏览(33)
  • uniapp学习之【uniapp的返回事件 onBackPress 在微信小程序中不生效的问题】

    uniapp 的返回事件 onBackPress 在微信小程序中不生效的问题 场景 :页面中点击左上角的返回按钮,监听返回操作,页面返回前执行了一些操作, uniapp 页面生命周期中有 onBackPress ,因此将操作写在了 onBackPress () 页面生命周期钩子当中, H5 测试一切正常,但是微信开发工具中调试的时候

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包