Народ, кто подскажет, как правильно организовать изменение данных в сервисе, чтобы они обновились во всех контроллерах и директивах? Допустим, есть у меня USER фабрика или сервис, а при изменении данных, какие только watcher'ы не вешал, все-равно ни одна директива не видит там изменений. Пока-что поставил костыли на поток и сделал обновление страницы временно, но это ведь не катит) Что кто знает по этому поводу?
Мы используем что-то вроде паттерна наблюдателя позволяя оформлять подписку на изменения данных внутри сервиса, но это самим надо руками фигачить, поэтому проще использовать стандартную систему ивентов по тому же принципу
В одном проекте просто решили использоваться $rootScope.$emit внутри сервиса и $rootScope.$on везде где нужна подписка, просто обозначили соглашение по поводу именования иветов, вроде $rootScope.$emit(‘serviceName.eventName’, data)
Из минусов - костыльно и нужно в документацию проекта вносить все эти условности, из плюсов - не надо ничего имплементировать руками, всё есть из коробки
Народ, кто подскажет, как правильно организовать изменение данных в сервисе, чтобы они обновились во всех контроллерах и директивах? Допустим, есть у меня USER фабрика или сервис, а при изменении данных, какие только watcher'ы не вешал, все-равно ни одна директива не видит там изменений. Пока-что поставил костыли на поток и сделал обновление страницы временно, но это ведь не катит) Что кто знает по этому поводу?
Не обновляются данные только в одном случае, если в компонентах используются копии объектов/массивов, а не оригиналы. Тогда изменив оригинал копия остается преженей. Используй один и тот же инстанс и все будет отлично работать, еще и памяти сэкономишь
Не обновляются данные только в одном случае, если в компонентах используются копии объектов/массивов, а не оригиналы. Тогда изменив оригинал копия остается преженей. Используй один и тот же инстанс и все будет отлично работать, еще и памяти сэкономишь
Проблема в том, что данные сначала подгружаются по post запросу и приходится вместо объекта отдавать промис. Если же давать ссылку на пока что пустой объект будут ошибки, т.к. во view будут попытки взять пока еще несуществующие свойства объекта. В фабрике есть переменная info (это и есть объект), пытался в ответ промиса отдавать эту переменную, но дальнейшие манипуляции с объектом фабрики никак не влияли на данные в scope контроллера
Ну и вообще, не хорошо это, использовать ссылки, по мне так данные возращаемые из сервиса вообще должны быть иммутабельны, иначе очень быстро всё в лапшу превращается в большом приложении