AngularJS Developer Guide on Expressions提及名为$locals
的内容:
可以使用标识符this和locals对象使用标识符$ locals来访问上下文对象。
我不明白"当地人对象"是的,我无法在文档中找到有关$ locals的更多信息。它的目的是什么?你是如何操作的?
答案 0 :(得分:5)
相关提交在哪里可以找到有关它的更多信息this one,它还链接到要求介绍$ locals的问题。
简而言之,当使用'&'将参数传递给指令时,为了使指令能够在需要时执行某些代码(例如当您使用ng-click="doSomething()"
时),该指令可以通过使用本地值向呼叫者提供信息。
例如,您可以使用ng-click="doSomething($event)"
,其中$ event不是范围的属性,而是ng-click指令传递的值。
您可以使用$locals
一次访问所有这些值,而不是单独访问该指令传递的每个“本地”值。
&安培;或& attr - 提供在父作用域的上下文中执行表达式的方法。如果未指定attr名称,则假定属性名称与本地名称相同。范围的给定和窗口小部件定义:{localFn:'& myAttr'},然后隔离范围属性localFn将指向count = count + value表达式的函数包装器。通常需要通过表达式将数据从隔离范围传递到父范围,这可以通过将局部变量名称和值的映射传递到表达式包装器fn来完成。 例如,如果表达式为
来指定金额值increment(amount)
,那么我们可以通过将localFn称为localFn({amount:22})
(强调我的)
在上面的示例中,指令传递的整个对象{amount: 22}
可以使用$ locals,因此您可以使用increment($locals.amount)
答案 1 :(得分:2)
See this test描述来自Issue 13247的功能。
还要考虑带回调的指令示例:
// JS
angular.module('app', [])
.controller('AppCtrl', function($scope) {
$scope.log = function(locals) {
console.log(locals);
};
})
.component('fooBar', {
template: "",
bindings: { cb: '&'},
controller: function() {
this.a = 1;
this.b = 2;
this.c = 3;
this.cb(this);
}
});
// HTML
<body ng-app="app" ng-controller="AppCtrl">
<foo-bar cb="log($locals)">foobar</foo-bar>
</body>