Имам 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, и Джигар Праджапати за твоя помощ.