首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用‘`this.$watch`’而不是$scope.$watch`‘with 'Controller As’

使用‘`this.$watch`’而不是$scope.$watch`‘with 'Controller As’
EN

Stack Overflow用户
提问于 2014-09-09 15:06:07
回答 4查看 9.7K关注 0票数 11

目前,我正在使用Controller As格式来确定控制器的作用域。

这对于保持视图上的值范围清晰和易于理解非常有用。

代码语言:javascript
复制
<div ng-app="myApp" ng-controller="myController as myctrl">
    <ul>
        <li ng-repeat="contact in myctrl.contacts">
            <input type="text" ng-model="contact.name.first" />
        </li>
    </ul>
</div>

然而,在实现$watch时,我遇到了问题,因为它似乎依赖于$scope,因此下面的内容将无法工作。

代码语言:javascript
复制
angular.module('myApp',[])
.controller('myController',['contacts',function(contacts) {
    this.contacts = contacts;

    this.$watch('contacts', function(newValue, oldValue) {
       console.log({older: oldValue, newer:newValue});
    });

}]);

我得到的未定义不是一个函数,在引用this时,没有方法$watch

是否有一种方法可以使用$watch格式对值进行Controller As处理?

JS Fiddle

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-09 15:15:39

即使使用controllerAs格式,$scope也存在。

实际上,controllerAs所做的是将控制器实例的this绑定到$scope。

例如,controller="myController as myctrl"做(幕后):$scope.myctrl = this ( this引用myController实例)。

因此,您只需为手表注入并使用$scope

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

    $scope.$watch(function () {
        return contacts;
    }, function (newValue, oldValue) {...});
});
票数 21
EN

Stack Overflow用户

发布于 2015-03-02 23:52:44

代码语言:javascript
复制
$scope.$watch("contact", callback, true) // true makes it a deep/recursive watch
票数 4
EN

Stack Overflow用户

发布于 2015-07-23 11:00:01

尝尝这个,

代码语言:javascript
复制
 $scope.$watch(angular.bind(this, function () {
            return this.contacts;
        }), function (newValue, oldValue) {
            console.log((newValue + '  -  ' + oldValue));
        });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25748001

复制
相关文章

相似问题

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