生命周期

名称 含义 时机
constructor 构造函数 new的时候
install 初始化安装,这可以拿到用户传进的data进行处理 实例化
installed 安装完成,HTML已经插入页面之后执行。 实例化
uninstall 卸载组件。执行remove方法会触发该事件 销毁时
beforeUpdate 更新前 存在期
afterUpdate 更新后 存在期

举个例子

class Timer extends Omi.Component {constructor(data) {super(data);}install () {this.data = {secondsElapsed: 0};}tick() {this.data.secondsElapsed++;this.update();}installed(){this.interval = setInterval(() => this.tick(), 1000);}uninstall() {clearInterval(this.interval);}style () {return `.num { color:red; }`;}render () {return `<div>Seconds Elapsed:<span class="num"> {{secondsElapsed}}</span></div>`;}
}复制代码

点击这里→在线试试

事件处理

Omi的事件分内置事件和自定义事件。在内置事件处理方面巧妙地利用了浏览器自身的管线机制,可以通过event和this轻松拿到事件实例和触发该事件的元素。

内置事件

什么算内置事件?只要下面正则能匹配到就算内置事件。

on(abort|blur|cancel|canplay|canplaythrough|change|click|close|contextmenu|cuechange|dblclick|drag|dragend|dragenter|dragleave|dragover|dragstart|drop|durationchange|emptied|ended|error|focus|input|invalid|keydown|keypress|keyup|load|loadeddata|loadedmetadata|loadstart|mousedown|mouseenter|mouseleave|mousemove|mouseout|mouseover|mouseup|mousewheel|pause|play|playing|progress|ratechange|reset|resize|scroll|seeked|seeking|select|show|stalled|submit|suspend|timeupdate|toggle|volumechange|waiting|autocomplete|autocompleteerror|beforecopy|beforecut|beforepaste|copy|cut|paste|search|selectstart|wheel|webkitfullscreenchange|webkitfullscreenerror|touchstart|touchmove|touchend|touchcancel|pointerdown|pointerup|pointercancel|pointermove|pointerover|pointerout|pointerenter|pointerleave)复制代码

内置事件怎么绑定?如下所示:

class EventTest extends Omi.Component {constructor(data) {super(data);}handleClick(dom, evt){alert(dom.innerHTML);}render () {return `<div onclick="handleClick(this, event)">Hello, Omi!</div>`;}
}复制代码

自定义事件

开发者自己定义的组件的事件,称为自定义事件,自定义事件必须以on开头,即onXXXX的格式,不然Omi识别不到。这里拿分页作为例子:

import Omi from '../../src/index.js';
import Pagination from './pagination.js';
import Content from './content.js';Omi.makeHTML('Pagination', Pagination);
Omi.makeHTML('Content', Content);class Main extends Omi.Component {constructor(data) {super(data);}installed(){this.content.goto(this.pagination.data.currentPage+1);}handlePageChange(index){this.content.goto(index+1);}render () {return `<div><h1>Pagination Example</h1><Content name="content" /><Paginationname="pagination"data-total="100"data-page-size="10"data-num-edge="1"data-num-display="4"     onPageChange="handlePageChange" /></div>`;}
}Omi.render( new Main(),'body');复制代码

如上面的onPageChange就是自定义事件,触发会执行handlePageChange。onPageChange方法是在Pagination中执行:

import Omi from '../../src/index.js';class Pagination extends Omi.Component {.........linkTo: "#",prevText: "Prev",nextText: "Next",ellipseText: "...",prevShow: true,nextShow: true,onPageChange: function () { return false; }}, this.data);this.pageNum = Math.ceil(this.data.total / this.data.pageSize);}goto (index,evt) {evt.preventDefault();this.data.currentPage=index;this.update();this.data.onPageChange(index);}.........
}复制代码

这里取了Pagination组件的部分代码。高亮的就是执行onPageChange的地方。

相关地址

  • 演示地址
  • 源码地址

招募计划

  • Omi的Github地址github.com/AlloyTeam/o…
  • 如果想体验一下Omi框架,请点击Omi Playground
  • 如果想使用Omi框架,请阅读 Omi使用文档
  • 如果想一起开发完善Omi框架,有更好的解决方案或者思路,请阅读 从零一步步打造web组件化框架Omi
  • 关于上面的两类文档,如果你想获得更佳的阅读体验,可以访问Docs Website
  • 如果你懒得搭建项目脚手架,可以试试Scaffolding for Omi
  • 如果你有Omi相关的问题可以New issue
  • 如果想更加方便的交流关于Omi的一切可以加入QQ的Omi交流群(256426170)

Omi教程-生命周期和事件处理相关推荐

  1. 深入了解asp.net框架。生命周期以及事件处理机制

    刚接触asp.net框架觉得很好奇.他的快速开发是怎么实现的.控件的状态又是怎么保持的.我们都知道http是无状态的.而且网上很多人都说使用asp.net框架使用服务器框架是非常慢的. 带着这些疑问我 ...

  2. 不怕面试再问 Activity,一次彻底地梳理(原理+生命周期)

    作为 Android 四大组件之一的 Activity 我的印象中就是用来展示界面的,在很长一段时间里,只要提及界面.UI.View 我脑子里第一个闪过的就是 Activity ,我的理解中一直认为  ...

  3. iOS10 UI教程视图的生命周期

    iOS10 UI教程视图的生命周期 说到视图的生命周期一般都是指视图控制器的视图生命周期.在视图的声明周期中最主要的有8个方法,分别为loadView().viewDidLoad().viewWill ...

  4. react学习笔记(4)组件的生命周期(运行阶段和销毁阶段)以及事件处理函数

    1.组件的生命周期 接着(2)中的组件生命周期 1.运行阶段 运行阶段有5个步骤: componentWillReceiveProps: 父组件修改属性触发,可以修改新属性,修改状态. shouldC ...

  5. Omi框架学习之旅 - 生命周期 及原理说明

    生命周期 name avatars company constructor 构造函数 new的时候 install 初始化安装,这可以拿到用户传进的data进行处理 实例化 installed 安装完 ...

  6. Vue.js 系列教程 3:Vue-cli,生命周期钩子

    原文:intro-to-vue-3-vue-cli-lifecycle-hooks 译者:nzbin 这是 JavaScript 框架 Vue.js 五篇教程的第三部分.在这一部分,我们将学习 Vue ...

  7. java 实例的生命周期_[Java教程]Vue实例生命周期

    [Java教程]Vue实例生命周期 0 2017-08-15 19:00:09 前面的话 Vue实例在创建时有一系列的初始化步骤,例如建立数据观察,编译模板,创建数据绑定等.在此过程中,我们可以通过一 ...

  8. Fastify 系列教程三 (验证、序列化和生命周期)

    Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) Fastify 系列教程三 (验证.序列化和生命周期) Fastify ...

  9. DevOps教程:DevOps 生命周期

    [注]本文译自:https://www.javatpoint.com/devops-lifecycle   DevOps定义了运营与开发之间的敏捷关系.从产品的开始到最终阶段,开发团队和运营工程师共同 ...

  10. Fabric官方教程(release 2.2)翻译及总结——链码的生命周期管理

    1. 将智能合约部署到通道 将智能合约部署到信道最终用户通过调用智能合约来与区块链账进行交互.在Hyperledger Fabric中,智能合约以称为chaincode的软件包部署.想要验证交易或查询 ...

最新文章

  1. 今天在YY上听课感觉不错
  2. Flex 元数据标签使用
  3. 手把手教你使用 1D 卷积和 LSTM 混合模型做 EEG 信号识别
  4. Win7无法远程桌面
  5. 【MM模块】MRP Running — Lot Size 批量大小
  6. pci配置基地址_PCIe扫盲——基地址寄存器(BAR)详解
  7. php如何上传txt文件,并且读取txt文件
  8. C++小白课本练习1
  9. nodejs 中的 commonjs 模块化使用
  10. 城域网100G宽带传输设备实现客户接入链路告警
  11. 世达03017数字万用表的使用
  12. 用计算机计算数学公式,Formula Calculator公式计算器
  13. 怎么注册免费苹果开发者账号?
  14. NOIP2016提高组 第一天第二题 天天爱跑步running 题解
  15. 基于 Vue3.0 和 Ant Design Vue ,高颜值管理后台UI框架vue-vben-admin运行
  16. java 红牛摩托车_2017红牛世界五大越野摩托车系列耐力赛
  17. 使用python爬虫爬取百度新闻,告诉你社会热点话题
  18. 小程序中 使用canvas 生成推广图片——wepy框架
  19. 「越南小鸟」被迫下架,「反人类」小游戏成游戏业「嘲笑鸟」
  20. 四位大小写字母和数字随机验证码

热门文章

  1. 423.从英文中重建数字
  2. 矩阵论16 17 18 19
  3. python快速编程入门课本中的名片管理器_Python-名片管理器
  4. 采样频率和带宽的关系_示波器的采样率和存储深度在实际操作有什么用?
  5. Codeforce 1600Difficulty Graphs 20 questions
  6. 2020牛客多校训练2 I Interval(对偶图最短路求最小割)
  7. linux代码运行流程,Linux中程序执行的流程分析工具——strace
  8. MySQL 如何优化大分页查询?
  9. 第 7 章 Neutron - 068 - Neutron 物理部署方案
  10. 医学图像之DICOM格式解析