2016-01-26 9 views
6

AngularJS Developer Guide on Expressions accenna qualcosa chiamato $locals:

E 'possibile accedere all'oggetto contesto mediante l'identificatore di questo e la gente del posto oggetto utilizzando l'identificatore $ gente del posto.

Non capisco cosa sia "oggetto locale" e non riesco a trovare più informazioni su $ locals nei documenti. Qual è lo scopo? Come ci lavori?

risposta

5

Il commit pertinente in cui trovare ulteriori informazioni a riguardo è this one, che si collega anche al problema che chiede di introdurre $ locals. In breve, quando si passa un parametro ad una direttiva usando '&', in breve, affinché la direttiva sia in grado di eseguire del codice quando necessario (ad esempio quando si utilizza ng-click="doSomething()"), la direttiva può passare le informazioni al chiamante usando valori locali.

Ad esempio è possibile utilizzare ng-click="doSomething($event)", dove $ event non è un attributo dell'ambito, ma un valore passato dalla direttiva ng-click.

Invece di accedere a ciascun valore "locale" passato dalla direttiva singolarmente, è possibile avere accesso a tutti contemporaneamente utilizzando $locals.

Maggiori informazioni su come passare i valori locali dalla direttiva è disponibile in documentation on directives:

& o & attr - fornisce un modo per eseguire un'espressione nel contesto del campo di applicazione genitore. Se non viene specificato alcun nome attr, si assume che il nome dell'attributo sia lo stesso del nome locale. Data e definizione del widget scope: {localFn: '& myAttr'}, quindi isola la proprietà dell'ambito localFn punterà a un wrapper di funzioni per il conteggio = numero + espressione del valore. Spesso è desiderabile passare i dati dall'ambito isolato tramite un'espressione all'ambito principale, questo può essere fatto passando una mappa di nomi e valori di variabili locali nel wrapper espressione fn. Per esempio, se l'espressione è increment(amount) allora possiamo specificare il valore di quantità chiamando il localFn come localFn ({importo: 22})

(sottolineatura mia)

Nel axample sopra, la intero oggetto {amount: 22} passato dalla direttiva è disponibile utilizzando $ gente del posto, e si potrebbe quindi utilizzare increment($locals.amount)

2

See this test che descrive la funzionalità che nasce dalla Issue 13247.

Considera anche questo esempio di una direttiva con un 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

Così che cosa questo registro? – zakdances

+0

Registra ciò che il controller restituisce. '{a: 1, b: 2, c: 3, cb: function (locals) {...}}' –

Problemi correlati