这篇会讲下组件内部的事宜处置惩罚机制,以及组件和外界通信的处置惩罚体式格局(父子通信,兄弟通信等)
组件内的事宜处置惩罚机制
第一种,直接写在标签里,用on-eventName=“eventHandler”的体式格局
<link rel="import" href="../bower_components/polymer/polymer.html">
<dom-module id="event-element">
<template>
<button id="myBtn" on-click="handleClick">Alert</button>
</template>
<script>
Polymer({
is: "event-element",
handleClick: function(e){
alert("clicked by "+ e.currentTarget.localName);
}
});
</script>
</dom-module>
第二种运用EventListener的体式格局
<link rel="import" href="../bower_components/polymer/polymer.html">
<dom-module id="event-element">
<template>
<button id="myBtn">Alert</button>
</template>
<script>
Polymer({
is: "event-element",
handleClick: function(e){
alert("clicked by "+ e.currentTarget.localName);
},
listeners: {
'click': 'handleClick',
'myBtn.click': 'handleClick'
}
});
</script>
</dom-module>
人人注重,这里运用了myBtn.click这类 id+.+eventName的体式格局,能够对内部某个id的dom举行监听。而不写id,则监听是加在全部组件之上的。人人能够跑下上面的代码看看区分。
组件对外触发一个事宜
组件分装好了终究照样要被别的组件挪用,与外界通信的,如果把属性赋值作为 输入in, 那末事宜就能够称为输出out了。就拿原生的input标签举行举例。 input组件的输入就是type属性赋值,输出则是onclick事宜的触发。
<input type=“xxx” onclick="xxxx">
同理,关于自定义组件也一样,关于输入来讲前面几篇已引见了properties如安在组件外被赋值。那末事宜的触发我们由怎样来处置惩罚呢?
Polymer给我们供应了一个fire的api让我们来触发自定义事宜,来看下面的代码
<link rel="import" href="../bower_components/polymer/polymer.html">
<dom-module id="event-element">
<template>
<button id="myBtn">Alert</button>
</template>
<script>
Polymer({
is: "event-element",
handleClick: function(e){
//第一个参数为eventname,第二个参数为通报的值
this.fire('kick',{'data':'transfer data'});
},
listeners: {
'myBtn.click': 'handleClick'
}
});
</script>
</dom-module>
对自定义事宜增加监听后就能够捕获到这个“kick”的自定义事宜了。我尝试了直接在组件上运用on-kick举行监听却不可,非得运用addEventListener体式格局,多是polymer不支持这类写法,希冀在后续版本中加以改进。
<!DOCTYPE html>
<html>
<head>
<script src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="components/event-element.html">
</head>
<body>
<event-element id="eventElement"></event-element>
</body>
<script>
HTMLImports.whenReady(function () {
var el = document.getElementById("eventElement");
el.addEventListener("kick", function (e) {
alert(e.detail.data);
});
});
</script>
</html>
运转效果
音讯机制
这里来聊聊组件化开辟的音讯机制,这个并不局限于polymer或许web运用,适用于一切的组件式开辟手艺。实在归结下来就是几条原则:
父子通信:
父->子 设置子的大众属性
子->父 子触发事宜,父监听事宜,父捕获到子发出的事宜后再做后续处置惩罚。
兄弟通信:
兄->父 跟父子通信一样,先经由过程事宜把需求提交给父
父->弟 父拿到兄的需求后,一致调理,经由过程设属性的体式格局来访问弟
爷孙通信:
参照父子通信,一层层向上通报事宜,再一层层向下设置属性,现实开辟时只管将组建的接口都设想合理防止跨n级通信的为难排场
远亲通信:
请运用前端音讯总线(如单例的音讯总线类)来处理这里剪不断理还乱的case,然则这类体式格局不宜大面积运用,父子,和兄弟间通信照样请运用上面的几种体式格局。