J'essaie d'écouter les changements dans mon service injecté (mise à jour automatique) dans le contrôleur. Dans l'exemple ci-dessous, vous trouverez deux cas $watch
- un qui fonctionne mais je ne sais pas exactement pourquoi et un qui était évident pour moi, mais ne fonctionne pas. Le deuxième exemple est-il la bonne façon de le faire? N'est-ce pas la duplication de code? Quelle est la bonne façon de le faire?Surveillance dans le service depuis le contrôleur
Service:
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;
}
]);
Controller:
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');
});
}
]);