/ / Как да получите най-новите данни от модул, който се актуализира от друг модул в 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

По това време, когато контролер и модел щеинициализирайте и страницата се зарежда, ще трябва да активирате променливата $ range.data.namesList и да присвоите данни inti по това, чрез $ range.data.namesList = NamesModel.getAll (); , тогава, когато някога ще го извикате, той ще върне актуализирани данни, заключението е, че когато първоначално създадете променлива на обхвата, трябва да го направите обект / променлива в реално време.


0 за отговор № 2

Две неща решиха:

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

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

Ето новата работеща захвърлям

Благодаря Claies, и Джигар Праджапати за твоя помощ.