Подтвердить что ты не робот

Использование $watch без $scope (контроллер как синтаксис)

В Angular 1.3 можно использовать this.foo='bar' insteaod $scope.foo='bar'. Теперь, как я могу использовать $watch без $scope?

4b9b3361

Ответ 1

Существует несколько способов избежать использования $watch при использовании синтаксиса controller as.

Следующие примеры взяты из сообщения о котором я писал об избежании $scope.

Использование ng-change

Если у вас установлены часы для прослушивания изменений свойств, которые происходит из поля формы, тогда ng-change - ваш лучший выбор.

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

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

Использование свойств ES5

Если у вас есть какое-либо свойство, которое не связано с полем ввода или будет обновляться с кода, может показаться, что часы - это ваши единственные выбор. Однако, если вам не нужно поддерживать IE8 или ниже, то вы могут использовать свойства ES5 для запуска функций, когда что-то меняется на вашем контроллере.

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
});