Там более старый ответ, который я увидел здесь на S.O, который гласит:
"Этот JavaScript работает, поскольку мы передаем объект обратно из а не стоимость. Когда объект JavaScript возвращается из служба Angular добавляет часы во все свои свойства.
Затем он приводит этот пример:
JavaScript:
angular.module("Demo", []) .factory("DemoService", function($timeout) { function DemoService() { var self = this; self.name = "Demo Service"; self.count = 0; self.counter = function(){ self.count++; $timeout(self.counter, 1000); } self.addOneHundred = function(){ self.count+=100; } self.counter(); } return new DemoService(); }) .controller("DemoController", function($scope, DemoService) { $scope.service = DemoService; $scope.minusOneHundred = function() { DemoService.count -= 100; } });
HTML
<div ng-app="Demo" ng-controller="DemoController"> <div> <h4>{{service.name}}</h4> <p>Count: {{service.count}}</p> </div> </div>
Я спросил OP, нужны ли $watch, чтобы данные были одинаковыми для контроллеров, и они сказали "нет", не уточняя.
Но, когда я проверяю это, значение "count" DemoService на обоих контроллерах не одинаково, если только я не использую $watch.
Вот скрипка с приведенным ниже примером, но с добавленным контроллером:
http://jsfiddle.net/qqejytbz/1/
Учитывая этот пример, как можно сохранить значение одинаковым, но без использования $watch или $broadcast?
Обновлен скрипт благодаря выбранному ответу: