在{}和link中为angular指令定义独立作用域变量的区别
Difference between defining isolated scope variable for angular directive in {} and in link
在angular指令中,我知道我可以分配孤立的作用域,但我需要添加'='或'@'或'&'来定义{}中的变量,而我不需要在link中这样做,例如:
scope: {
foo:'=foo',
bar:'@bar'
}
这是link: function($scope, $element){
$scope.foo = 'foo';
$scope.bar = 'bar';
}
这个也可以(link函数在指令中)
scope: {
foo:'foo',
bar:'bar'
}
这行不通!因为我没有添加'='或'@'或'&'
所以我的问题是,链接中的$作用域应该与$作用域相同:{},两者都是相同的隔离作用域,但为什么我可以在链接中定义变量而不添加'='或'@'或'&'?
谢谢! !
使用link属性,您只是在处理指令的隔离作用域。使用scope属性,您将定义如何将元素(在父作用域中)的属性导入到隔离作用域中。它们有不同的用途。
=, @和&前缀定义了在将属性导入隔离作用域时如何解释属性:
-
modelParent: '=modelIsolate' -通过在父作用域中定义的模型(modelParent)和在隔离作用域中定义的模型(modelIsolate)之间建立双向模型绑定,将模型导入到隔离作用域中。这里,指令中的modelParent属性被解释为一个模型。
-
attrib1: '@attrib1' -通过将属性值计算为字符串,将字符串导入到隔离作用域中。属性可能有内插表达式。例如,如果你把'hello {{name}}'作为一个属性传递给你的指令,而name在父作用域中被绑定到'James',那么在你的隔离作用域中被绑定到' atrib1 '的将是$scope。attrib1 = '你好James'。当'name'绑定发生变化时(即从James变为Mike),那么隔离作用域中的'attrib1'将自动更新。由于这个原因,@绑定有时被称为单向绑定。就我个人而言,我喜欢把它看作是支持插值的字符串。
-
express: '&express' -将可在父作用域中求值的表达式导入到隔离作用域中。这通常用于从指令的隔离作用域中执行存在于父作用域中的函数。例如,如果你在父作用域:
$scope.onclick = function() {};
中定义了一个点击处理程序,并将其传递给指令:<directive attrib1="onclick" />
,你可以在指令:template:'<div ng-click="attrib1()" />'
中调用该函数。
这三种方法都将范围变量从父范围导入到隔离的范围。但是,根据您想如何解释指令属性,您将更喜欢其中一个而不是其他。
- 用嵌套函数和默认函数定义函数
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 为什么“;未定义的“;在JavaScript中结束循环
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- 要求未定义JS回调参数
- 控制台返回var不是't定义,但它是
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- jQuery自定义验证比较多个输入的序列
- 查看JS对象的所有键,甚至是getter定义的键
- fetch() 函数未在 Ubuntu Chromium 浏览器上定义
- $window.ga在AngularJS事件中未定义
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 定义完全独立的样式信息
- 如何使用javascript独立地为聚合物自定义元素的每个实例的lightdom设置样式
- 自定义jQuery方法独立作用于元素的每个实例
- 在JavaScript中定义全局对象的独立于实现的版本
- 如何使用自定义格式化器内置函数来调用非jqgrid独立函数
- 在{}和link中为angular指令定义独立作用域变量的区别