Кажется, я не могу понять этот метод привязки контроллеров данных через службу. Читая сообщения на этом веб-сайте, люди, кажется, рекомендуют держаться подальше от $ watch из-за накладных расходов. Итак, я вижу много людей, использующих обещания, но, похоже, не могут заставить работать начальные данные.
Приложение My Signle page имеет 2 таблицы на 2 отдельных контроллерах и третий контроллер, который имеет форму для редактирования данных. У меня есть простая кнопка отправки, которая установит новые данные для повторной синхронизации на всех контроллерах. Вот что у меня получилось:
Первый Контроллер
GDI_App.controller('first_Controller', function ($scope, Service) {
Service.get_data();
$scope.Current.incidents = Service.current_data(); //returns $$State;
});
Второй контроллер
GDI_App.controller('second_Controller', function ($scope, Service) {
Service.get_data();
$scope.Current.incidents = Service.current_data(); //returns $$State;
});
Третий контроллер, который устанавливает данные при отправке
GDI_App.controller('third_Controller', function ($scope, Service) {
$scope.submit = Service.set_data(data);
});
Услуга
GDI_App.factory('Service', function($q) {
var Current = {}
Current.Data = [
{ "Data1": "123123", "Data2": "15437" },
{ "Data1": "432234", "Data2": "146" },
{ "Data1": "45654", "Data2": "3534" },
{ "Data1": "76587", "Data2": "78978" },
{ "Data1": "2342", "Data2": "5345878" },
{ "Data1": "178", "Data2": "34534" },
{ "Data1": "173838", "Data2": "354534" },
];
return{
get_data: function(){
return $q.when(Fake_Data)
.then(function(data) {
return data;
});
}
set_data: function(data){
Current.Data = data;
}
}
});
Кто-нибудь знает, что мне будет не хватать?
Начните с просмотра сообщений об ошибках в консоли разработчика.
Использование последней версии angularjs 1.6



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Для контроллеров, которые вы хотите обновить без явного получения данных из службы, я бы предложил создать отдельную функцию, которая получает «кешированное» значение из службы, которая устанавливается установщиком.
Прямо сейчас вы привязаны к выборке, поэтому, по сути, в каждом дайджесте (если вы использовали этот вызов), который будет просто повторно извлекать это обещание, если вы напрямую свяжете его с функцией. Поэтому вместо этого используйте метод получения и псевдоним для вызова модели с ограниченной областью действия в контроллере.
Таким образом, он получает его только при загрузке контроллера и не знает, когда обновить / получить эту модель, если вы не использовали часы.
$scope.display = Service.get;
В представлении просто сделай
<div ng-repeat = "mystuff in display()"></div>
Поэтому, как только значение будет обновлено какой-либо другой службой, оно просто обновится в следующем дайджесте.
Спасибо, но в моем случае это не сработает. Мне нужно, чтобы это работало через метод контроллера / службы из-за моей настройки.
Как бы это не сработало? Вы получаете доступ к двум контроллерам - которые напрямую ссылаются на модель, которая устанавливается из выборки?
Я имел в виду, что с моей текущей настройкой это решение не будет совместимо. В любом случае спасибо.
Как ваша текущая установка несовместима?
Вы ведь понимаете, что это попадет в дайджест, верно? Таким образом, вы просто получаете значение при загрузке контроллера - при инициализации, заставляя смотреть. Вы можете генерировать, а затем обновлять контроллеры, когда значение обновляется в службе, или выполните указанные выше действия. В противном случае удачи.
какая у вас версия angularjs? И включает ли это взаимодействие сервер? Потому что если нет - обещания тебе не нужны вообще