Javascript 从控制器查看服务中的更改
我正在尝试在控制器中侦听注入服务(自我更新)中的更改。在下面的示例中,您将发现两个Javascript 从控制器查看服务中的更改,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我正在尝试在控制器中侦听注入服务(自我更新)中的更改。在下面的示例中,您将发现两个$watch案例-一个有效,但我不知道确切原因,另一个对我来说很明显,但不起作用。第二个例子是正确的方法吗?那不是代码重复吗?正确的方法是什么 服务: app.factory("StatsService", [ '$timeout', 'MockDataService', function ($timeout, MockDataService) { var service, time
$watch
案例-一个有效,但我不知道确切原因,另一个对我来说很明显,但不起作用。第二个例子是正确的方法吗?那不是代码重复吗?正确的方法是什么
服务:
app.factory("StatsService", [
'$timeout', 'MockDataService',
function ($timeout, MockDataService) {
var service, timeout;
timeout = 5000;
service = {
fetch: function () {
// Getting sample data, irrelevant, however this is what updates the data
return this.data = MockDataService.shuffle();
},
grab: function () {
this.fetch();
return this.update();
},
update: function () {
var _this = this;
return $timeout(function () {
return _this.grab();
}, timeout);
}
};
service.grab();
return service;
}
]);
控制器:
app.controller("StatsController", [
'$scope', 'StatsService',
function ($scope, StatsService) {
var chart;
$scope.stats = StatsService;
$scope.test = function (newValue) {
if (arguments.length === 0) {
return StatsService.data;
}
return StatsService.data = newValue;
};
// This doesn't work
$scope.$watch('stats', function (stats) {
return console.log('meh');
});
// This works, don't know why
$scope.$watch('test()', function (stats) {
return console.log('changed');
});
}
]);
请参见第三个参数:
objectEquality
比较对象是否相等,而不是作为参考
但是,如果您只对查看返回的数据感兴趣,则应执行以下操作:
$scope.$watch('stats.data', function (stats) {
return console.log('meh');
});
您可以使用
$rootScope
事件。例如,在服务内部,您可以使用$rootScope.$broadcast(“somethingFetched”,data)
调度事件,并在控制器$scope.$on(“somethingFetched”,function(event,data){$scope.data=data})
中捕获它
您可以在文档中找到更多详细信息。$rootScope.Scope