使用`this。$ watch`代替`$ scope。$ watch`和'Controller As'

马尔库斯

目前,我正在使用Controller As范围控制器格式。

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

<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>

但是,实现a$watch时遇到了问题,因为它似乎依赖于它,$scope因此以下操作将不起作用。

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小提琴

加尔帕克

即使有controllerAs格式,$scope也可以找到。

实际上controllerAs,是将控制器实例绑定this到$ scope。
例如controller="myController as myctrl"(在幕后):($scope.myctrl = this此处thismyController实例)。

因此,您可以注入$scope手表并将其用于手表:

.controller('myController', function ($scope, contacts) {
    this.contacts = contacts;

    $scope.$watch(function () {
        return contacts;
    }, function (newValue, oldValue) {...});
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章