/ / Як отримати останні дані з модуля, який оновлено з іншого модуля в AngularJS - angularjs

Як отримати останні дані з модуля, який оновлюється з іншого модуля в AngularJS - angularjs

У мене є 3 модулі AngularJS, M модуль, який повинен бути модель власник / менеджер та ще 2 модулі app який є основним модулем і A який буде маніпулювати даними M модуль. І те, і інше app і A мають залежність від M.

Для простоти модель - це просто масив імен тварин, і я хочу додати нові імена з модуля A тих, кого я очікую побачити, відображених у списку, контрольованому app модуль

Це плач ілюструє випадок.

Я застосував шаблон посередника, як пропонується в цьому stackoverflow питання так що мій модельний модуль M опублікує свої зміни передплатниками.

app має контролер NamesListCtrl що зчитує дані з NamesModel завод з M, та підписується на його подію NamesModelChanged що публікується щоразу, коли внутрішні дані всередині NamesModel змінено

Проблема: коли анонімний зворотний дзвінок для NamesListCtrl передплата на NamesModelChanged називається (рядок 87 на планку), заявою $scope.data.namesList = NamesModel.getAll(); не буде отримувати оновлені дані:

NamesModel.subscribe("NamesModelChanged", function() {
console.log("OK, I will update my data");
// not getting the updated list
$scope.data.namesList = NamesModel.getAll();
});

Будь-яка допомога?

Відповіді:

0 для відповіді № 1

У той час, коли буде контролер і модельініціалізувати і сторінка завантажувалася, вам потрібно буде ініціалізувати змінну $ scope.data.namesList і призначити дані в цьому, за допомогою $ scope.data.namesList = NamesModel.getAll (); , тоді, коли ви коли-небудь зателефонуєте їй, він поверне оновлені дані. Висновок полягає в тому, що коли ви створюєте змінну області спочатку, вам потрібно зробити це об'єктом / змінною реального часу.


0 для відповіді № 2

Дві речі вирішили:

1) The publish зателефонував зсередини NamesModel завод повинен включати list так що subscribe callback в інших контролерах отримає свіжі дані, тому припускаючи, що callback називає опублікований список як newList, просто телефоную $scope.data.namesList = newList оновить дані в NamesListCtrl.

2) Тоді $scope.$digest() потрібно викликати, щоб змусити оновити інтерфейс.

Ось нова робоча плач

Дякую Глини, і Джигар Праджапаті за вашу допомогу.