angular中directive的scope用法

来源:互联网 发布:linux vim查看文件命令 编辑:程序博客网 时间:2024/06/08 18:42

## 说明
指令里有个scope属性,可以用来设置指令的作用域范围,默认值为false。

默认值 scope:false

不会有自己的作用域,即是直接使用父级的scope里的值。

scope:true

创建自己的作用域,同时继承父级scope里的值,即等同于从父级拿到初始值,修改它,不会改变父级scope里的值。(和ng-controller的不太一样,后面有提到)

scope:{}

完全独立的作用域($rootScope都拿不到),通过三种模式 = & @同父级scope交互。
1、= 双向绑定 写法是

<demo a="aa"></demo>

2、@ 单向绑定 写法是

<demo b="{{bb}}"></demo>

3、& 函数方法绑定 写法是

<demo c="cc()"></demo>

那么像上面这样scope里就是:

scope:{    a:'=',    b:'@',    c:'&'}

aa,bb,cc都是父级scope里的值。
注意:这里从父级传过来的函数,是引用,是不能操作指令里的scope值的,会报错。只是能执行父的方法,没法传递参数数据过去。

另外,指令的这里定义指令的名字是驼锋命名的,在html里要转成中划线链接的,如 指令名是 aBc ,那么 html里要写成<a-bc> <a-bc>,属性值绑定也遵守这个规则,大写字母替换成 ‘中划线+小写’,如,ABC,就要写成<a-b-c><a-b-c>。

附:作用域继承时的关系:
在子里修改引用类型的值是会同时改变父子的值,推荐的写法是推荐写成引用类型的?这样也不太好。。
可以测下代码:

<h1>父作用域:</h1><p>{{a}}</p> <p>{{b}}</p> <p>{{c.str}}</p> <p>{{d.str}}</p> <div ng-controller="MyController">     <h1>子作用域:</h1>     <p>{{a}}</p>     <p>{{b}}</p>     <p>{{d.str}}</p> </div>
$rootScope.a= 'a的默认值,父修改会影响所有的子级';$timeout(function(){  $rootScope.a = '父级a改变了,子级也跟着变了';},2000);$rootScope.b= 'b的默认值,子级修改不会影响父级';$timeout(function(){  $scope.b = '子级b改变了,不会影响父级';},2000);$rootScope.c= {str:'c的默认值,子级修改会影响父级,因为是引用类型'};$timeout(function(){  $scope.c.str='子级c改变了,会影响父级,因为是引用类型';},2000);$rootScope.d= {str:'d的默认值,子级修改会影响父级,因为是覆盖'};$timeout(function(){  $scope.d={str:'子级d改变了,不会影响父级,因为是覆盖'};},2000);
0 0
原创粉丝点击