Omi教程-生命周期和事件处理

# 生命周期
名称含义时机
constructor构造函数new的时候
install初始化安装,这可以拿到用户传进的data进行处理实例化
installed安装完成,HTML已经插入页面之后执行实例化
uninstall卸载组件。执行remove方法会触发该事件销毁时
beforeUpdate更新前存在期
afterUpdate更新后存在期
## 示意图 ![lc](http://images2015.cnblogs.com/blog/105416/201701/105416-20170119153018546-1566368987.png) ## 举个例子 ```js 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 `
Seconds Elapsed: {{secondsElapsed}}
`; } } ``` 点击这里→在线试试 # 事件处理 Omi的事件分内置事件和自定义事件。在内置事件处理方面巧妙地利用了浏览器自身的管线机制,可以通过event和this轻松拿到事件实例和触发该事件的元素。 ## 内置事件 什么算内置事件?只要下面正则能匹配到就算内置事件。 ```js 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) ``` 内置事件怎么绑定?如下所示: ```js class EventTest extends Omi.Component { constructor(data) { super(data); } handleClick(dom, evt){ alert(dom.innerHTML); } render () { return `
Hello, Omi!
`; } } ``` ## 自定义事件 开发者自己定义的组件的事件,称为自定义事件,自定义事件必须以on开头,即onXXXX的格式,不然Omi识别不到。这里拿分页作为例子: ```js 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 `

Pagination Example

`; } } Omi.render( new Main(),'body'); ``` 如上面的onPageChange就是自定义事件,触发会执行handlePageChange。onPageChange方法是在Pagination中执行: ```js 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的地方。 ## 相关地址 * [演示地址](http://alloyteam.github.io/omi/example/pagination/) * [源码地址](https://github.com/AlloyTeam/omi/tree/master/example/pagination) # 招募计划 * Omi的Github地址[https://github.com/AlloyTeam/omi](https://github.com/AlloyTeam/omi) * 如果想体验一下Omi框架,请[点击Omi Playground](http://alloyteam.github.io/omi/example/playground/) * 如果想使用Omi框架,请阅读 [Omi使用文档](https://github.com/AlloyTeam/omi/tree/master/docs#omi使用文档) * 如果想一起开发完善Omi框架,有更好的解决方案或者思路,请阅读 [从零一步步打造web组件化框架Omi](https://github.com/AlloyTeam/omi/tree/master/docs#从零一步步打造web组件化框架omi) * 关于上面的两类文档,如果你想获得更佳的阅读体验,可以访问[Docs Website](http://alloyteam.github.io/omi/website/docs.html) * 如果你懒得搭建项目脚手架,可以试试[Scaffolding for Omi](https://github.com/AlloyTeam/omi/tree/master/scaffolding) * 如果你有Omi相关的问题可以[New issue](https://github.com/AlloyTeam/omi/issues/new) * 如果想更加方便的交流关于Omi的一切可以加入QQ的Omi交流群(256426170) ![](http://images2015.cnblogs.com/blog/105416/201702/105416-20170208095745213-1049686133.png)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值