我这里有一个服务sharedData
和一个控制器HostController
。我希望让HostController
观看saveDataObj
服务中的sharedData
变量,然后将该值分配给host.dataOut
,然后将其反映在视图中作为ngModel属性。
我的问题是我真的不知道如何使用$watch
。我希望每次host.dataOut
服务saveDataObj
更改sharedData
时更新setData
(或者至少每次调用sharedData.getData(): Object { }
时都更新。
以下代码在控制台中生成一行:
setData
这在初始化期间是预期的。但是,当我通过另一个控制器调用saveDataObj
以将angular.module('app', [])
.factory('sharedData',function(){
var saveDataObj = {};
return {
getData: function(){
return saveDataObj;
},
setData: function(data){
saveDataObj = data;
}
};
})
.controller('HostController',['$scope','sharedData',function($scope,sharedData){
$scope.sharedData = sharedData;
var host = this;
host.dataOut = {};
$scope.$watch(
'sharedData.getData()',
function handleDataChange(newValue,oldValue) {
console.log("sharedData.getData():",newValue);
host.dataOut = newValue;
}
);
}])
更改为其他值时,没有任何内容记录到控制台。
我做错了什么?
numpy
答案 0 :(得分:0)
.controller('HostController',['$scope','sharedData',function($scope,sharedData){
$scope.sharedData = sharedData;
var host = this;
host.dataOut = {};
$scope.serviceData = sharedData.getData(); //local variable
$scope.$watch('serviceData', function(newValue, oldValue) {
console.log("sharedData.getData():",newValue);
host.dataOut = newValue;
}
);
}]);
希望能帮到你!
答案 1 :(得分:0)
回答我,OP:
问题不是因为我试图在服务中观察某些东西 - 而是我试图观察一个对象。为此,我需要声明$ watch的第三项objectEquality
为真。
$scope.$watch(
'sharedData.getData()',
function handleDataChange(newValue,oldValue) {
console.log( "sharedData.getData():", newValue );
},
true
);
https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope#$观看
我将此作为最佳答案,因为我是一个自恋者。