• angular1.5 组件学习 -- 3、组件的生命周期钩子


    Components(生命周期)钩子函数

    angular1.5为每个组件提供了生命周期钩子函数去响应不同的时刻,有以下几个钩子:

      1、$onInit():此时 component 构造函数初始化完毕(包括 bindings 中的数据),我们可以使用它来将浮在控制器各个地方的初始化变量集中起来,统一进行初始化操作。

    this.$onInit = function () {
        this.sayHello = "Hello !";
    }

      2、$onChanges(changesObj):当 bindings 单向数据变化时会触发这个钩子。父组件向子组件单向传输数据:“@”、“<”。注:双向绑定不出发。

    this.$onChanges = function (event) {
        //该 event 对象中有单向传输的变量及值方便获取
        console.log(event);
    }

      3、$doCheck():每次脏检查会触发的钩子。

    this.$doCheck = function () {
        //每次脏检查都会触发
        console.log('check');
    }
    this.$onInit = function () {
        //组件加载完成初始化
        this.num = 0;
        $interval(function () {
            self.num = Math.random();
        }, 1000)
    }

      4、$onDestroy():当 controller 的 scope 销毁时会触发的钩子。比如:你使用了 $postLink 来设置了DOM事件监听函数或者其他非Angular原生的逻辑,在 $onDestroy 中你可以把这些事件监听或者非原生逻辑清理干净。

      5、$postLink():当组件及其子组件的元素已经被编译和链接触发的钩子。一个使用场景:tabs 组件中有未知长度的 tabs 数组,而其内 tab 的个数,通过每个 tab 组件初始化后调用 tabs 组件的 add 方法来 push 进 tabs 数组;此时如果想设置默认第几个 tab 被选中,那么只能等待所有 tab页加载完成,才能进行被选中设置。

    <!DOCTYPE html>
    <html lang="en" ng-app="app">
    <head>
        <meta charset="UTF-8">
        <title>postLink 与 transclude 合用</title>
        <script src="angular.js"></script>
        <style>
            .selected {color:red};
        </style>
    </head>
    
    <body>
        <tabs>
            <tab label="Tab 1">
                Tab 1 contents!
            </tab>
            <tab label="Tab 2">
                Tab 2 contents!
            </tab>
            <tab label="Tab 3">
                Tab 3 contents!
            </tab>
        </tabs>
        <script>
            var tab = {
                bindings: {
                    label: '@'
                },
                require: {
                    tabs: '^^'
                },
                transclude: true,
                template: `
                    <div class="tabs__content" ng-if="$ctrl.tab.selected">
                        <div ng-transclude></div>
                    </div>
                `,
                controller: function () {
                    this.$onInit = function () {
                        this.tab = {
                            label: this.label,
                            selected: false
                        };
                        this.tabs.addTab(this.tab);
                    };
                }
            };
    
            var tabs = {
                transclude: true,
                template: `
                    <div class="tabs">
                        <ul class="tabs__list">
                            <li ng-repeat="tab in $ctrl.tabs">
                                <a href=""
                                    ng-bind="tab.label"
                                    ng-click="$ctrl.selectTab($index);"></a>
                            </li>
                        </ul>
                        <div class="tabs__content" ng-transclude></div>
                    </div>
                `,
                controller: function () {
                    this.$onInit = function () {
                        this.tabs = [];
                    };
                    this.addTab = function addTab(tab) {
                        this.tabs.push(tab);
                    };
                    this.selectTab = function selectTab(index) {
                        for (var i = 0; i < this.tabs.length; i++) {
                            this.tabs[i].selected = false;
                        }
                        this.tabs[index].selected = true;
                    };
                    this.$postLink = function () {
                        this.selectTab(0);
                    }
                }
            };
    
            angular.module('app', [])
                .component('tab', tab)
                .component('tabs', tabs);
        </script>
    </body>
    </html>

    这里涉及到组价的另一个属性:transclude,后面会更新其使用。

  • 相关阅读:
    Django Form组件的扩展
    Python TCP与UDP的区别
    Python三次握手和四次挥手
    网络基础之网络协议
    Python 类方法、实例方法、静态方法的使用与及实例
    python深浅拷贝
    2021牛客寒假算法基础集训营1 题解
    01 Trie 专题
    MOTS:多目标跟踪和分割论文翻译
    牛客巅峰赛S2第6场题解
  • 原文地址:https://www.cnblogs.com/guofan/p/8360143.html
Copyright © 2020-2023  润新知