角分离范围的及绑定回报getter函数,而不是价值

问题描述:

内部隔离范围,我有以下的结合:角分离范围的及绑定回报getter函数,而不是价值

scope: { 
    languages: "&", 
} 

值传递一样,里面DOM:

<directive-name languages="['1', '2']"> 

后来,当我尝试访问languages财产scope.languages返回只有预定义上下文才能返回的$parse服务返回的功能。所以,虽然我可以很容易地得到这样的约束值

var languages = scope.languages() 

我仍然想确保这确实是预期的行为。那么&绑定应该返回预定义的上下文获取器函数而不是实际值?

是的,这是使用“&”的整个目的。

从角文档:

&或& ATTR - 提供了一种方法中的 父范围的上下文中执行的表达式。如果未指定attr名称,则假定属性名称 与本地名称相同。给定范围的小部件定义:{ localFn:'& myAttr'},那么隔离范围属性localFn将指向 count = count + value表达式的函数包装。通常, 希望通过表达式 将数据从隔离范围传递到父范围,这可以通过将本地 变量名称和值的映射传递到表达式包装函数fn来完成。例如,如果表达式是增量(金额),则 ,那么我们可以通过调用localFn作为localFn({amount:22})来指定金额 。

更多信息:AngularJS Docs

但是如果你想要做的是传递数组的指令,所有你需要做的是评估该属性:

在你的指令:

scope.languages = scope.$eval(attrs.languages); //This should assign the array ['1', '2'] to your scope property. 
+0

或简单地使用**''='**符号:) – ryeballar 2014-11-22 10:56:31

+0

'='将创建观察者,这在我的情况下是多余的 – 2014-11-22 10:58:36

+0

不,'='是两个范围属性之间的双向数据绑定IES。再次从文档:'=或= attr - 通过attr属性的值定义的本地范围属性和名称的父范围属性之间建立双向绑定。“#: – Wawy 2014-11-22 10:58:51