首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Angularjs:“控制器作为语法”和$watch

Angularjs:“控制器作为语法”和$watch
EN

Stack Overflow用户
提问于 2014-06-06 17:31:33
回答 7查看 53.7K关注 0票数 156

如何在使用controller as语法时订阅属性更改?

代码语言:javascript
复制
controller('TestCtrl', function ($scope) {
  this.name = 'Max';
  this.changeName = function () {
    this.name = new Date();
  }
  // not working       
  $scope.$watch("name",function(value){
    console.log(value)
  });
});
代码语言:javascript
复制
<div ng-controller="TestCtrl as test">
  <input type="text" ng-model="test.name" />
  <a ng-click="test.changeName()" href="#">Change Name</a>
</div>  
EN

回答 7

Stack Overflow用户

发布于 2014-08-18 15:13:51

我通常这样做:

代码语言:javascript
复制
controller('TestCtrl', function ($scope) {
    var self = this;

    this.name = 'Max';
    this.changeName = function () {
        this.name = new Date();
   }

   $scope.$watch(function () {
       return self.name;
   },function(value){
        console.log(value)
   });
});
票数 138
EN

Stack Overflow用户

发布于 2014-06-06 17:43:40

您可以使用:

代码语言:javascript
复制
   $scope.$watch("test.name",function(value){
        console.log(value)
   });

这是与您的示例一起工作的JSFiddle

票数 23
EN

Stack Overflow用户

发布于 2014-11-25 21:49:59

类似于使用"TestCtrl as test“中的" test”,如另一个答案中所述,您可以将您的作用域分配给"self“:

代码语言:javascript
复制
controller('TestCtrl', function($scope){
    var self = this;
    $scope.self = self;

    self.name = 'max';
    self.changeName = function(){
            self.name = new Date();
        }

    $scope.$watch("self.name",function(value){
            console.log(value)
        });
})

通过这种方式,您不需要绑定到DOM中指定的名称("TestCtrl as .bind“),并且还避免了对函数进行测试( this )的需要。

与指定的原始...for一起使用:

代码语言:javascript
复制
<div ng-controller="TestCtrl as test">
    <input type="text" ng-model="test.name" />
    <a ng-click="test.changeName()" href="#">Change Name</a>
</div>
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24078535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档