2016-10-09 3 views
1

다른 모듈에서 업데이트되는 모듈의 최신 데이터를 얻는 방법 AM 모듈의 데이터를 조작합니다. appA은 모두 M에 종속됩니다.나는 <strong>모델</strong> 홀더/관리자로 3 개 AngularJS와 모듈, <code>M</code> 모듈을 가지고 있고, 메인 모듈 또 다른 2 개 모듈 <code>app</code> 및 AngularJS와

단순함을 위해이 모델은 동물 이름의 배열 일 뿐이며 A 모듈에서 app 모듈에 의해 제어되는 목록에 반영 될 것으로 예상되는 새 이름을 추가하려고합니다.

plunk은이 경우를 설명합니다.

내 모델 모듈 M이 구독자에게 변경 사항을 게시 할 수 있도록이 stackoverflow question에 제안 된대로 조정자 패턴을 구현했습니다.

appM에서 NamesModel 공장에서 데이터를 판독하는 컨트롤러 NamesListCtrl를 가지며, 내부에 내부 NamesModel 데이터가 변경 될 때마다 문서가 해당 이벤트에 가입 NamesModelChanged.

문제 :

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

어떤 도움 : NamesModelChanged-NamesListCtrl 구독에 대한 익명 콜백 (쿵하는 소리 라인 87)를 호출 할 때 문 $scope.data.namesList = NamesModel.getAll(); 업데이트 된 데이터를 검색하지 않습니다?

+0

마치 여기의 문제는 네임즈 모델이 서비스가 아닌 팩토리 인 것처럼 보입니다. 팩토리가 삽입 될 때마다 팩토리가 실행하는 함수가 리턴됩니다. 이는 하나 이상의 목록을 가지고 있음을 의미합니다. 'App Module'이 퍼블릭을 듣게되면,'ModuleA'가 다른 * 인스턴스를 업데이트하는 동안 팩토리가 리턴하는 함수의 getAll' 함수를 호출합니다. 서비스는 싱글 톤이기 때문에 하나의 인스턴스 만 존재할 수 있으므로이 문제는 발생하지 않습니다. – Claies

+0

그렇습니다. 팩트 리는 또한 싱글 톤이지만, 실제로는 동일한 함수가 항상 반환된다는 것을 의미합니다.하지만 함수는 여전히 여러 번 호출됩니다. 시작) 버전의 팩토리가 반환하지만 개별 인스턴스는 여전히 반환합니다. – Claies

답변

0

컨트롤러와 모델이 초기화되고 페이지가로드 될 때 $ scope.data.namesList 변수를 초기화하고 $ scope.data.namesList = NamesModel.getAll()에 의해 데이터를 int에 할당해야합니다. ; , 당신이 그것을 호출 할 때, 그것은 갱신 된 데이터를 반환 할 것이고, 결론은 범위 변수를 처음 생성 할 때 실시간 객체/변수를 실시간으로 만들어야한다는 것입니다.

0

두 가지가 해결되었다 :

1) 그래서 newList로 출판 목록을 명명 된 콜백을 가정, 그래서 다른 컨트롤러에서 subscribe 콜백 신선한 데이터를 얻을 것이다 list을 포함해야 NamesModel 공장 내에서라는 publish$scope.data.namesList = newList을 호출하면 데이터가 NamesListCtrl으로 업데이트됩니다.

2) UI를 새로 고치려면 $scope.$digest()을 호출해야합니다.

여기에 새로운 plunk

작업 덕분에 Claies하고 도움을 Jigar Prajapati입니다.

관련 문제