在AngularJS表达式中,$locals是指当前作用域中的本地变量。

9

AngularJS开发者指南上的表达式部分提到了一个名为$locals的东西:

可以使用标识符this访问上下文对象,使用标识符$locals访问本地对象。

我不明白什么是“本地对象”,也找不到有关$locals的更多信息。它的目的是什么?如何对其进行操作?

2个回答

5
相关的提交,可以在此处找到更多信息。该提交还链接到一个问题,要求引入$locals。
简而言之,在使用'&'传递指令参数时(例如,当您使用ng-click="doSomething()"时),为了使指令能够在需要时执行一些代码,指令可以使用本地值将信息传递给调用者。
例如,您可以使用 ng-click="doSomething($event)",其中$event不是作用域的属性,而是由ng-click指令传递的值。
无需单独访问由指令传递的每个“本地”值,您可以使用$locals一次性访问所有这些值。
有关如何从指令中传递本地值的更多信息,请参见指令文档

&或&attr-提供了一种在父级作用域上下文中执行表达式的方法。如果没有指定属性名称,则假定属性名称与本地名称相同。给定和小部件定义作用域:{localFn:“&myAttr”},则隔离作用域属性localFn将指向一个函数包装器,用于count = count + value表达式。通常希望通过表达式将数据从隔离作用域传递到父作用域,可以通过将本地变量名称和值的映射传递到表达式包装fn中来实现。例如,如果表达式为increment(amount),则我们可以通过调用localFn({amount:22})指定amount值。

在上面的示例中,由指令传递的整个对象{amount:22}可使用$locals访问,因此可以使用increment($locals.amount)

2

请参见此测试,描述了从问题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>

那么这个日志记录了什么? - zakdances
它记录控制器返回的内容。 { a: 1, b: 2, c: 3, cb: function (locals){...} } - Cory Silva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接