目前我使用的是控制器
格式作用域控制器。
Currently I am using the Controller As
format for scoping controllers.
这伟大工程保持值的范围明确和易于遵循的意见。
This works great for keeping the scope of values on the views clear and easy to follow.
<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>
然而,实现当 $观看
我遇到的问题,因为它似乎是依赖于 $范围
所以下面将无法工作。
However, when implementing a $watch
I am running into problems because it seems to be dependent on $scope
so the following will not work.
angular.module('myApp',[])
.controller('myController',['contacts',function(contacts) {
this.contacts = contacts;
this.$watch('contacts', function(newValue, oldValue) {
console.log({older: oldValue, newer:newValue});
});
}]);
我得到的不确定是不是这个
没有一个方法 $观看。
I get undefined is not a function in reference to this
not having a method $watch
.
有没有一种办法 $观看
与控制器
格式的值?
Is there a way to $watch
a value with the Controller As
format?
JS小提琴
JS Fiddle
即使在 controllerAs
格式的 $范围
是存在的。
Even with the controllerAs
format, the $scope
is there.
其实什么 controllerAs
确实是绑定控制器实例的这个
到$范围。结果例如。 控制器=作为myController的myctrl
做(幕后): $ scope.myctrl =此
(其中这个
指 myController的
实例)。
In fact what controllerAs
does is bind the controller instance's this
to the $scope.
E.g. controller="myController as myctrl"
does (behind the scenes): $scope.myctrl = this
(where this
refers to the myController
instance).
所以,你可以注入,并使用 $范围
手表:
So, you can just inject and use the $scope
for watches:
.controller('myController', function ($scope, contacts) {
this.contacts = contacts;
$scope.$watch(function () {
return contacts;
}, function (newValue, oldValue) {...});
});