myApp.directive('myView', ['myService',function($scope) {
return {
restrict : 'C',
template : '',
templateUrl : 'myView.html',
controller : function($scope,myService){
$scope.items = myService.$data;
$scope.$watch('myService.$data' , function(newVal, oldVal, scope) {
console.log("Watching items ...");
});
},
};
}]);
我正在使用上面的代码,我想在其服务中定义myService。$ data。 $ watch在加载控制器时第一次调用,在代码中的其他地方我更新服务变量$ data。当我使用ng-repeat指令并绑定$ data时,这会反映在UI中 根据我在UI更新之前的不足,我必须再次调用这个特殊的手表,但事实并非如此。所以我假设我没有正确使用手表。
答案 0 :(得分:0)
只是做:
$scope.$watch(
function() { return myService.$data; },
function(...) { /*same*/ }
);
<强> BUT:强>
如果$data
是对象,您可能希望将,true
添加到手表中,以便即使内部属性发生更改也会收到通知:
$scope.$watch(
function() { return myService.$data; },
function(...) { /*same*/ },
true
);
代码中的声明是错误的。它应该是(仅显示更改):
myApp.directive('myView', ['myService',function(myService) { // NOT $scope
...
controller: ["$scope", function($scope) { // YOU GET myService FROM THE DIRECTIVE