2014-05-19 17 views
13

Una domanda molto breve: In Angolare, esiste un modo qualsiasi per ottenere la "causa principale" di un $watch da attivare?

Diciamo che avete il seguente codice JavaScript:

$scope.$watch("foo", function(value){ 
    // here I'd like to know if the change is triggered 
    // due to change in ngModel or through ngClick 
}; 

$scope.changeFoo = function(){ 
    $scope.foo = "bar" 
}; 

E questo è il codice HTML:

<input ng-model="foo"> 
<button ng-click="changeFoo()">Change Foo > Bar</button> 

Nel mio $watch Mi piacerebbe sapere che cosa ha causato ad essere licenziato. In questo caso, è stato un cambiamento in ngModel o il mio valore è stato modificato nella funzione ngClick?

+3

Non sono sicuro al 100% ma non penso che ci sia un modo per saperlo. Non potrei provarlo comunque. Interessante domanda – edi9999

risposta

5

No, non esiste un modo per farlo con l'implementazione corrente.

$watch vengono attivati ​​eseguendo una funzione denominata $apply. Quella funzione non sa chi l'ha innescata.

Hai bisogno di un'altra prospettiva per risolvere il tuo problema.

+0

temevo che questa sarebbe stata la risposta, ho bisogno di verificare se è sulla roadmap 2.0. Grazie per la risposta! – thomaux

1

No, non possiamo sapere quale lo innesca. Controlla questa domanda how-to-get-the-dom-element-that-triggered-ng-change, forse provando a scrivere una direttiva personalizzata per passare più informazioni al controller è un modo possibile per ottenere il trigger.

+0

Grazie per la domanda collegata, darò un'occhiata a questo! – thomaux

Problemi correlati