开坑,写点Polymer 1.0 教程第5篇——事宜与音讯机制

这篇会讲下组件内部的事宜处置惩罚机制,以及组件和外界通信的处置惩罚体式格局(父子通信,兄弟通信等)

组件内的事宜处置惩罚机制

第一种,直接写在标签里,用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 1.0 教程第5篇——事宜与音讯机制》

音讯机制

这里来聊聊组件化开辟的音讯机制,这个并不局限于polymer或许web运用,适用于一切的组件式开辟手艺。实在归结下来就是几条原则:

父子通信:

父->子 设置子的大众属性
子->父 子触发事宜,父监听事宜,父捕获到子发出的事宜后再做后续处置惩罚。

兄弟通信:

兄->父 跟父子通信一样,先经由过程事宜把需求提交给父
父->弟 父拿到兄的需求后,一致调理,经由过程设属性的体式格局来访问弟

爷孙通信:

参照父子通信,一层层向上通报事宜,再一层层向下设置属性,现实开辟时只管将组建的接口都设想合理防止跨n级通信的为难排场

远亲通信:

请运用前端音讯总线(如单例的音讯总线类)来处理这里剪不断理还乱的case,然则这类体式格局不宜大面积运用,父子,和兄弟间通信照样请运用上面的几种体式格局。
    原文作者:熊丸子
    原文地址: https://segmentfault.com/a/1190000003834899
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞