2016-01-26 11 views
6

AngularJS Developer Guide on Expressions wspomina coś o nazwie $locals:

To jest możliwe, aby uzyskać dostęp do obiektu kontekstowego za pomocą identyfikatora i to miejscowi obiektu przy użyciu identyfikatora $ mieszkańców.

Nie rozumiem, co to jest "obiekt lokalny" i nie mogę znaleźć więcej informacji o $ locals w dokumencie. Jaki jest cel? Jak się na tym operujesz?

Odpowiedz

5

Odpowiednim poleceniem, gdzie można znaleźć więcej informacji na ten temat, jest this one, który prowadzi również do problemu z prośbą o wprowadzenie $ locals.

Krótko mówiąc, podczas przekazywania parametru do dyrektywy za pomocą "&", aby dyrektywa mogła wykonać kod w razie potrzeby (na przykład podczas korzystania z ng-click="doSomething()"), dyrektywa może przekazywać informacje do dzwoniącego używając lokalnych wartości.

Na przykład można użyć ng-click="doSomething($event)", gdzie $ event nie jest atrybutem zakresu, ale wartością przekazaną przez dyrektywę ng-click.

Zamiast dostępu do każdej "lokalnej" wartości przekazywanej indywidualnie przez dyrektywę, można uzyskać do nich dostęp jednocześnie za pomocą $locals.

Więcej informacji na temat sposobu przekazania wartości lokalnych od dyrektywy jest dostępny w documentation on directives:

& lub & attr - zapewnia sposób wykonywania wyrażenie w kontekście zakresu nadrzędnego. Jeśli nie podano żadnej nazwy attr, przyjmuje się, że nazwa atrybutu jest taka sama, jak nazwa lokalna. Podana definicja widgetu scope: {localFn: '& myAttr'}, a następnie wyodrębniona właściwość scope localFn wskaże wrapper funkcji dla wyrażenia count = count + value. Często pożądane jest przekazywanie danych z izolowanego zasięgu poprzez wyrażenie do zakresu nadrzędnego, można to zrobić, przekazując mapę lokalnych nazw zmiennych i wartości do opakowania wyrażenia fn. Przykładowo, jeśli ekspresja jest increment(amount) następnie można określić wartość ilości o wywołaniu localFn jako localFn ({wysokość: 22})

(kopalni nacisk)

W powyższym axample The cały obiekt {amount: 22} przeszedł przez dyrektywę jest dostępna za pomocą $ mieszkańców, i można w ten sposób wykorzystać increment($locals.amount)

2

See this test opisujące funkcjonalność, która powstała z Issue 13247.

również pod uwagę ten przykład dyrektywy z callback:

// 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> 
+0

Więc co ten dziennik? – zakdances

+0

Loguje, co zwraca kontroler. '{a: 1, b: 2, c: 3, cb: function (locals) {...}}' –