在隔离作用域内,我有以下绑定:
scope: {
languages: "&",
}
该值在 DOM 中像这样传递:
<directive-name languages="['1', '2']">
然后,当我尝试访问languages
属性时scope.languages
返回 getter 函数,就像 $parse
服务仅使用预定义上下文返回的函数一样。因此,虽然我可以轻松获得这样的绑定值
var languages = scope.languages()
我仍然想确保这确实是预期的行为。那么&
绑定是否应该返回预定义的上下文获取函数而不是实际值?
是的,这就是使用"&"的全部目的。
从角度文档:
&or &attr - 提供了一种在上下文中执行表达式的方法 父范围。如果未指定属性名称,则属性名称 假定与本地名称相同。给定和小部件的范围定义:{ localFn:'&myAttr' },然后隔离范围属性 localFn 将指向 计数 = 计数 + 值表达式的函数包装器。经常 希望通过表达式从隔离范围传递数据 到父范围,这可以通过传递本地映射来完成 变量名称和值到表达式包装器 FN 中。例如 如果表达式是增量(金额),那么我们可以指定金额 通过将 localFn 调用为 localFn({amount: 22}) 来的值。
更多信息: AngularJS Docs
但是,如果您只想将该数组传递给您的指令,您需要做的就是评估该属性:
在您的指令中:
scope.languages = scope.$eval(attrs.languages); //This should assign the array ['1', '2'] to your scope property.