2015-02-05 9 views
13

In Angular 1.3 è possibile utilizzare this.foo='bar' durante il periodo $scope.foo='bar'. Ora, come posso usare $watch senza $ scope?

+0

La risposta breve sembra essere no, perché $ orologio è un metodo di portata $, ma elaborare: Qual è il caso d'uso, qual è l'ambito della variabile che si desidera osservare? – doldt

+0

A seconda di cosa stai cercando di fare puoi usare [ng-change] (https://docs.angularjs.org/api/ng/directive/ngChange) se hai solo bisogno di osservare una modifica su un campo di input –

+0

Ho bisogno di guardare qualsiasi modifica a qualsiasi deposito di un modello. – PHPst

risposta

17

Esistono diverse opzioni per evitare di utilizzare $watch quando si utilizza la sintassi controller as.

I seguenti esempi sono presi da un blog post I wrote about avoiding $scope.

Utilizzando ng-change

Se si dispone di un orologio impostato per ascoltare per cambiare proprietà che proviene da un campo di modulo, quindi ng-cambiamento è la soluzione migliore.

<input type="text" ng-model="ctrl.name" ng-change="ctrl.search(ctrl.name)" /> 

MyCtrl.prototype.search = function(name){ 
    //call some service here 
}; 

Utilizzo di Proprietà ES5

Se si dispone di una certa proprietà che non è associato a un campo di input, o è sta per essere aggiornata dal codice, può sembrare come un l'orologio è la tua unica scelta . Tuttavia, se non si deve supportare IE8 o inferiore, allora lo può sfruttare le proprietà ES5 per attivare la funzionalità quando cambia qualcosa sul controller.

var MyCtrl = function(){ 
    this._selectedItem = null; 
}; 

Object.defineProperty(MyCtrl.prototype, 
    "selectedItem", { 
    get: function() { 
     return this._selectedItem; 
    }, 
    set: function (newValue) { 
     this._selectedItem = newValue; 

     //Call method on update 
     this.onSelectedItemChange(this._selectedItem); 
    }, 
    enumerable: true, 
    configurable: true 
}); 
Problemi correlati