开坑,写点Polymer 1.0 教程第4篇——组件的生命周期

这篇来谈谈polymer最中心的一块,也能够说是web components手艺最最中心的一块内容 “生命周期”,人人在进修一些框架的时刻最好都去相识一下它们的生命周期。

什么是生命周期

什么是生命周期?故名思议,拿人的例子来讲,比方诞生,上学,事情,完婚,生子,殒命等等,一生中几个重要阶段。组件也一样,从被建立,被剖析,被赋初始化值,被添加到舞台,被绘制,被规划,运用过程中被修改了值,被重绘,被从新规划,终究被父组件移除完毕昏暗的一身等等,都能够称为组件的生命周期。

来看看Polymer供应了那些我们能够catch到的大事宜(按触发的递次)。。
1.created callback:当组件被 new 时挪用,最早被触发,此时还不能接见组件的属性
2.ready callback :当组件内部依靠的子组件或许原生dom组件加载胜利,会挪用ready
3.factoryImpl callback :只要运用new ElementClass()体式格局建立组件时会被挪用,发生在ready后
4.attached callback :组件被添加到父组件中(显现在舞台)时触发,只会触发一次

5.attributeChanged callback :组件被父组件设置属性时触发,只要运用setAttribute()体式格局设置属性才会触发,牢记!(elementInstance.attr = xxx, <my-element att=”xxx”></my-element>都不会触发它)
6.detached callback :当被父组件removeChild时刻触发(即被移出舞台)

你跑一下下面的例子后,本身修修改改试一下就可以大抵体味,(光看笔墨的效果不如你本身跑一下代码)
my-element.html

<link rel="import" href="../bower_components/polymer/polymer.html">
<dom-module id="my-element">
    <template>
        <p>{{name}}</p>
        <button on-click="handleClick">change by self</button>
    </template>
    <script>
        MyElement = Polymer({

            is: 'my-element',
            properties: {
                name: {
                    value: "default name",
                    type: "String"
                }
            },
            
            handleClick: function(){
                this.setAttribute("name","name was set by parent");
            },

            created: function () {
                console.log(this.localName + '#' + this.id + ' was created');
            },

            attached: function () {
                console.log(this.localName + '#' + this.id + ' was attached');
            },

            detached: function () {
                console.log(this.localName + '#' + this.id + ' was detached');
            },

            attributeChanged: function (name, type) {
                console.log(this.localName + '#' + this.id + ' attribute ' + name +
                    ' was changed to ' + this.getAttribute(name));
            },
            
            ready:function(){
                console.log(this.localName + '#' + this.id + ' was ready');
            },
            
            factoryImpl: function(){
                console.log(this.localName + '#' + this.id + ' was factoryImpl');
            }

        });
    </script>
</dom-module>

parent-element.html

<link rel="import" href="../bower_components/polymer/polymer.html">
<link rel="import" href="my-element.html">
<dom-module id="parent-element">
    <template>
        <my-element id="myElement" name="name was set by tag's method"></my-element>
        <button on-click="handleChange">change by parent</button>
        <button on-click="handleRemove">remove</button>
    </template>
    <script>
        ParentElement = Polymer({
            is: 'parent-element',
            handleChange: function(){
                var myElement = document.getElementById("myElement");
                myElement.setAttribute("name","name was set by self");
            },
            handleRemove: function(){
                //补充一下这里$标记的作用是能够用$.id的体式格局疾速接见子组件(上面个handleChange函数则是传统体式格局)
                this.$.myElement.parentNode.removeChild(this.$.myElement);
            }
        });
    </script>
</dom-module>

index.html

<!DOCTYPE html>
<html>
<head>
    <script src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
    <link rel="import" href="components/parent-element.html">
</head>
<body>
    <parent-element></parent-element>
</body>
<script>    
</script>
</html>

控制台输出效果
《开坑,写点Polymer 1.0 教程第4篇——组件的生命周期》

这里我只是依据官网的文档形貌,也许引见了几个重要的生命周期,能够会有脱漏(诸如layout和render在什么阶段官网文档中并没有表现,或许说官方并没有供应这2二个阶段供的事宜接口,供用户来hack一些组件的天生,固然这仅仅是我临时的一些推想,待继承深切进修后会回过来逐一补充。)。生命周期篇就讲到这里,下一篇我们来聊聊Polymer的事宜,也就是人人比较关心的别的一个题目,组件之间的通信(音讯机制)

    原文作者:熊丸子
    原文地址: https://segmentfault.com/a/1190000003829743
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞