美文网首页程序员
自定义指令(下)

自定义指令(下)

作者: 全村的希望iOS | 来源:发表于2018-07-11 23:00 被阅读0次

    简介

            在我们用Angular开发中,我们必须要知道angular的生命中器,这个在未来的开发中至关重要。

            AngularJs生命周期分为两个阶段。

            编译阶段: 在编译阶段,AngularJs会遍历整个HTML文档并处理页面上声明的指令,这些指令可能是嵌套。在完成遍历或编译后,会返回一个模版函数,我们可以在模版函数返回之前对编译后的DOM进行修改,在这个时候对DOM进行修改,可以大幅度减少性能花销,因为DOM还未进行数据绑定编译完成,我们可以通过编译函数对DOM进行访问(此时的DOM并未呗渲染到页面中)。

            链接阶段:编译完成即进入链接阶段,在链接阶段,数据与DOM进行绑定。

    注意:上面两句话非常重要,与学习Vue必须学习Vue的生命周期一样重要       

    link函数

            link阶段负责将作用域和DOM进行链接,我们可以指定link函数,对已经编译的DOM进行一些如事件监听等操作。

            link函数可接受三个或四个参数

            scope该指令的作用域

            ele指令元素

            attrs指令上的属性

            当指令的require属性被指定 则第四个参数生效,否则为underfined

    例子

           <body ng-app="myApp">

                <my-directive diy="Angular"></my-directive>

           </body>

            <script>

                var app = angular.module("myApp",[]);

                app.directive("myDirective",function(){

                        return {

                            template: `

                                    <div>

                                            <h1>自定义指令{{name}}</h1>

                                    </div>

                            `,

                               link: function(scope,ele,attrs) {

                                    console.log(ele,arrts);//ele是DOM元素,attrs是DOm元素上的属性

                                    scope.name="Angular";

                                    //angular自带轻量级的jQuery

                                    ele.children().css("background","red");

                               }

                        }

                })

            </script>

    require配置项

        require参数被用来指定该指令依赖的其他指令

        在父子指令或兄弟指令的controller之间的一个桥梁,而require也用恰恰可以用来做指令间的通信

        <body ng-app="myApp">

                <first-directive>

                        <second-directive third-directive></second-directive>

                </first-directive>

         </body>

          <script>

                var app = angular.module("myApp",[]);

                app.directive("firstDirective",function(){

                    return {

                        controller: ["$scope",functiom($scope){

                                $scope.firstName= "first";

                                this.info = {

                                        name: $scope.firstName,

                                        age: 25

                                 }

                        }]

                    }

                }),

                app.directive("secondDirective",function() {

                        return {

                                template: `

                                        <div>

                                                    <h1>第二个指令</h1>

                                        </div>

                                `,

                                require: "?^thirdDirective"

                                link: function(scope,ele,attrs,ctrl) {

                                        console.log(ctrl.name)

                                }

                        }

                })

                app.directive("thirdDirective",function(){

                        return {

                                restrict: "A",

                                 require: "?^firstDirective",//?本级^上级 本级或上级查找

                                link: function(scope,ele,attrs,ctrl){

                                            console.log(ctrl.info)

                                },

                                controller: ["$scope",function($scope){

                                        this.name = "thirdDirective";

                                }]

                        }

                })

           </script>


                                                        不积跬步无以至千里,不积小流无以成江海    

    相关文章

      网友评论

        本文标题:自定义指令(下)

        本文链接:https://www.haomeiwen.com/subject/tgpkpftx.html