AngularJS表达式中的$ locals是什么?

时间:2016-01-26 16:22:17

标签: angularjs

AngularJS Developer Guide on Expressions提及名为$locals的内容:

  

可以使用标识符this和locals对象使用标识符$ locals来访问上下文对象。

我不明白"当地人对象"是的,我无法在文档中找到有关$ locals的更多信息。它的目的是什么?你是如何操作的?

2 个答案:

答案 0 :(得分:5)

相关提交在哪里可以找到有关它的更多信息this one,它还链接到要求介绍$ locals的问题。

简而言之,当使用'&'将参数传递给指令时,为了使指令能够在需要时执行某些代码(例如当您使用ng-click="doSomething()"时),该指令可以通过使用本地值向呼叫者提供信息。

例如,您可以使用ng-click="doSomething($event)",其中$ event不是范围的属性,而是ng-click指令传递的值。

您可以使用$locals一次访问所有这些值,而不是单独访问该指令传递的每个“本地”值。

documentation on directives

中提供了有关如何从指令传递本地值的更多信息
  

&安培;或& 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>