Hello Omi
import Omi from 'omi'; class Hello extends Omi.Component { style () { return ` h1{ cursor:pointer; }` } handleClick(evt){ alert(evt.target.innerHTML) } render() { return ` <div> <h1 onclick="handleClick">Hello ,{{name}}!</h1> </div>` } } Omi.tag('hello', Hello) class App extends Omi.Component { render() { return ` <div> <hello data-name="Omi"></hello> </div>` } } Omi.render(new App(),"#container")
- 组件继承自Omi.Component,
- render返回的是组件HTML片段,一般带有指令或者模板语法
- style返回的是组件的CSS,是局部的,不会污染组件以外的
- 通过Omi.tag('hello', Hello)把组件变成可声明在其他组件中的标签,即:<hello></hello>
- 通过data-name="Omi"把传递给子组件hello,子组件直接在render里可以使用{{name}}来使用传递来的数据
- 通过onclick="handleClick"给HTML元素绑定事件,在handleClick回调中可以拿到event对象,即:handleClick(evt){ }
特别强调,Omi.tag是全局注册,只要一个地方注册了,其他地方可以省去注册的代码。
你也可以使用ES5的方式进行开发:
var Hello = Omi.create("hello", { style: function () { return "h1{ cursor:pointer }" }, handleClick: function (evt) { alert(evt.target.innerHTML) }, render: function () { return ' <div>\ <h1 onclick="handleClick">\ Hello ,{{name}}!\ </h1>\ </div>' } }); var App = Omi.create("App", { render: function () { return '<div>\ <hello data-name="Omi"></hello>\ </div>' } }); Omi.render(new App(),'#container')