Angular指令学习

指令概览

指令本质上就是AngularJS扩展具有自定义功能的HTML元素的途径.

指令详解

指令的全部设置选项:

    angular.module('myApp', [])
                .directive('myDirective', function() {
                       return {
                       //指令在DOM中以何种方式声明 A:属性(默认) E:元素 C:类名 M:注释(少用)
                            restrict: String,
                       //在同一个元素上的指令调用顺序     
                           priority: Number,
                       //设为false时,同一元素上比该指令优先级低的指令不再执行
                         terminal: Boolean,
                      //HTML文本或模板函数   
                        template: String or Template Function:
                                        function(tElement, tAttrs) (...},
                      //HTML文件路径
                   templateUrl: String,
                      //默认false,true时取代元素
                       replace: Boolean or String,
                       //值为false时:我们创建的指令和父作用域共享一个model模型;值为true时: 创建新作用域初始化为父作用域 ,与父作用域不是同一个作用域;在指令已声明parentName的情况下,父域parentName变更,指令中parentName不会发生变化。在指令未声明parentName的情况下,父域的parentName变更,指令中parentName也会刷新;值为 {}时:  创建隔离作用域 ,需要使用绑定与外部交互。         
                       scope: Boolean or Object,
                     //true时将指令内部的元素嵌入到模板内ng-transclude处
                     transclude: Boolean,
                     //设置各个作用域scope
                      controller: String or function(scope, element, attrs,                              transclude,  otherInjectables) { ... },
                  controllerAs: String,
                   //指令获得外部其他指令的控制器
                     require: String,
                     //用link函数创建可以操作DOM的指令
                     link: function(scope, iElement, iAttrs) { ... },
                  // 返回一个对象或连接函数,
                              compile:                                    function(tElement, tAttrs, transclude) {
                                        return {
                                           pre: function(scope, iElement, iAttrs, controller) { ... },
                                         post: function(scope, iElement, iAttrs, controller) { ... }
                                       }
               };
});
向指令中传递数据(scope={})

最简单的方法就是使用指令所属的控制器提供的已经存在的作用域。缺点:如果控制器被移除,或者控制器中有相同的属性名,我们都必须得修改代码。
AngularJS通常作法是创建一个新的子作用域或者隔离作用域来解决这个问题。通过将作用域内部的属性someProperty与DOM中的some-Property属性绑定来传值。

<div my-directive
some-property="something">
</div>
...
scope: {
someProperty: '@' //someProperty与some-Property绑定
}
<div my-directive
some-attr="something">
</div>
...
scope: {
someProperty: '@someAttr' //someProperty与some-attr绑定
}

绑定策略:@:单向,指令内部作用域可以使用外部作用域的变量
=:双向
&:绑定父作用域函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值