Angular Isolate scope 的 & Binding 返回 getter 函数而不是 value

angular isolate scope's & binding returns getter function instead of value

本文关键字:函数 getter value 返回 Binding scope Isolate amp Angular      更新时间:2023-09-26

在隔离作用域内,我有以下绑定:

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.