你遇到了旧的价值问题。当你这样做的时候
$scope.updatedCount = ShareDataSvc.get();
更新的计数属性被设置为从get函数返回的值,因此不会看到服务中跟踪的值的未来更改。你有两个选择来解决这个问题。一种是为每个控制器添加一个手表,以监控服务中的值。不理想。第二种方法是让服务中的对象属性跟踪值,并将该对象绑定到范围。类似于(注意我只展示了有趣的部分):
app.factory("ShareDataSvc", function ($log) {
var set = function (val) {
$log.info('Setting service value to: ' + currentCount);
this.data.count = val;
}
return {
data: {count: 0}
set: set
}
});
app.controller("MainCtrl", ['$scope', 'ShareDataSvc', function ($scope, ShareDataSvc) {
$scope.data = ShareDataSvc.data;
$scope.updateCount = function () {
ShareDataSve.data.count++; // and increment function in the service would be better
}
}]);
app.controller("ListCtrl", ["$scope", "ShareDataSvc", function ($scope, ShareDataSvc) {
$scope.data = ShareDataSvc.data;
}]);
然后在HTML中
<body ng-app="app">
<div ng-controller="MainCtrl">
<span>Source: {{data.count}}</span>
<button ng-click="updateCount()">Increase Count</button>
</div>
<div ng-controller="ListCtrl">
Destination: {{data.count}}
</div>
</body>