2015-02-05 11 views
13

W Angular 1.3 możliwe jest użycie this.foo='bar' insteaod z $scope.foo='bar'. Teraz, jak mogę użyć $watch bez $ scope?

+0

Krótka odpowiedź wydaje się, że nie, ponieważ $ zegarek jest metodą zakres $, ale opracowanie: Co to use-case, jaki jest zakres zmiennej chcesz obserwować? – doldt

+0

W zależności od tego, co próbujesz zrobić, możesz użyć opcji [ng-change] (https://docs.angularjs.org/api/ng/directive/ngChange), jeśli musisz tylko zaobserwować zmianę w polu wprowadzania danych –

+0

Rzeczywiście Muszę obejrzeć każdą zmianę w dowolnym polu modelu. – PHPst

Odpowiedz

17

Istnieje kilka opcji, aby uniknąć konieczności używania $watch podczas korzystania ze składni controller as.

Następujące przykłady pochodzą z blog post I wrote about avoiding $scope.

Korzystanie ng-change

Jeśli masz zegarek skonfigurować do nasłuchiwania zmian rzeczowych że pochodzi od pola formularza, a następnie NG-zmiana jest najlepszym.

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

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

Korzystanie Właściwości ES5

Jeśli masz jakąś właściwość, że nie jest związany z pola wejściowego, lub jest będzie aktualizowany z kodu, to może wydawać się zegarek to Twój jedyny wybór . Jeśli jednak nie musisz obsługiwać IE8 lub niższego poziomu, możesz użyć właściwości ES5, aby uruchomić funkcję, gdy coś zmieni się na kontrolerze.

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 
}); 
Powiązane problemy