在我的应用程序中,我希望有一个 self 更新的数据服务,该服务被注入(inject)到 Controller 中:
app.factory("StatsService", function() {
var service;
service = {
data: 0,
init: function() {
var self = this;
setInterval(function() {
self.data = Math.floor((Math.random() * 100) + 1);
}, 1000);
}
};
service.init();
return service;
});
这是一个示例 Controller :
app.controller("SourcesController", ['$scope', 'StatsService', function($scope, StatsService) {
$scope.data = StatsService.data;
$scope.$watch('data', function(val) {
// this does not work either
});
}
如何让 Controller 反射(reflect)服务更改?我不知道我是否在服务或 Controller 上做错了什么,它就是不起作用。
最佳答案
由于 data 属性是原始 int
,因此值会复制到 scope.data
中。现在,这是两个单独的值,一个存储在服务中,另一个存储在 Controller 中。因此,即使服务数据发生变化,也不会影响 Controller 数据属性。
为了使它们保持同步,请使用带有子属性的对象。因此,服务中的数据声明变为
data:{value:0}
无论你在哪里绑定(bind),都使用表达式 data.value
关于javascript - 注入(inject) Controller 的自更新服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18356840/