使用没有$ scope的$ watch(控制器作为语法)

时间:2015-02-05 12:35:14

标签: javascript angularjs watch

在Angular 1.3中,可以使用this.foo='bar'的{​​{1}} insteaod。现在,如何在没有$ scope的情况下使用$scope.foo='bar'

1 个答案:

答案 0 :(得分:19)

使用$watch语法时,有几个选项可以避免使用controller as

以下示例来自blog post I wrote about avoiding $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
});