Im работает с угловыми 1.4. Я пытаюсь создать коллекцию внешнего интерфейса, которая обновляет представление при вставке новых данных. Я проверил другие ответы отсюда Angularjs watch service object, но я считаю, что я не переписываю массив, а это означает, что ссылка такая же.AngularJS - Смотреть изменения услуги, не обновляющие вид
Код довольно прост:
(function(){
var appCtrl = function($scope, $timeout, SessionSvc){
$scope.sessions = {};
$scope.sessions.list = SessionSvc._cache;
// Simulate putting data asynchronously
setTimeout(function(){
console.log('something more triggered');
SessionSvc._cache.push({domain: "something more"});
}, 2000);
// Watch when service has been updated
$scope.$watch(function(){
console.log('Watching...');
return SessionSvc._cache;
}, function(){
console.log('Modified');
}, true);
};
var SessionSvc = function(){
this._cache = [{domain: 'something'}];
};
angular.module('AppModule', [])
.service('SessionSvc', SessionSvc)
.controller('appCtrl', appCtrl);
})();
Я думал, что грязная проверка придется поймать изменения без использования каких-либо наблюдателя. Тем не менее, я поставил наблюдателя проверить, что что-то будет выполнено после срабатывания функции setTimeout. Я просто не вижу, что изменение обнаружено.
Адрес jsbin. Im действительно не понимает sth или делает действительно rockie ошибку.
[ '$ watchCollection'] (https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watchCollection) является лучшим вариантом в вашем сценарии. Независимо от этого, вам нужно запустить $ scope. $ Применять в обратном вызове async, поэтому Angular обновляет представление (см. Http://stackoverflow.com/questions/15112584/using-scope-watch-and-scope-apply-in -angularjs для получения дополнительной информации) – Rhumborl
использовать $ timeout. SetTimeout не запускает приложение – yeouuu
. Что сказал @yeouuu - вы вводите услугу $ timeout в свою демонстрационную версию, но вы вызываете setTimeout. Замените setTimeout на $ timeout. – RamblinRose