module.run에서 $ rootScope assingnment를 실행하는 동안 문제가 있습니다.
모듈의 실행에있다 : 다음
app.run(['$rootScope', 'UserData', function($rootScope, UserData) {
"use strict";
UserData.data().success(function(data) {
$rootScope.session = data;
});
}]);
모든 제어기 초기 사용한 경우 :
$scope.user = $rootScope.session;
는 정의되지 않는다. 나중에 사용되는 경우 필수 데이터가 들어 있습니다.
컨트롤러가 초기화 된 후 UserData.data의 콜백이 호출 될 수 있으므로 경쟁 조건이있는 것 같습니다.
컨트롤러의 $ scope.user에서 $ scope 및 $ timeout ($ scope. $ apply는 여기에 의미가 없습니다 ..) 시도했지만 아무런 효과가 없습니다. 나는 $ 범위를 넣어하려고합니다. $ app.run 적용
그것은 defauly에 의해 서비스에 사용 된 $ HTTP로, 이미 진행 분명 사실이다
에서 다이제스트 나에게
을 gaves $ apply를 호출합니다.
내가 뭘 잘못하고 있니?
각도 앱의 모든 컨트롤러에 데이터를 제공하려면 어떻게해야합니까? $ rootScope는 내가 원하는 것처럼 작동하지 않거나, 잘못된 것을하고 있습니까? 템플릿/컨트롤러에서 데이터를 업데이트 할 수있는 방법이 없으므로 app.run의 콜백이 -data로 채워질 때 채워집니다.
도움 주셔서 감사합니다.
추신 : 내가 console.log ($ rootScope) 할 때 나는 적절한 데이터를 가진 세션 객체를 가지고 있지만, 내가 console.log ($ rootScope.session)를 시도 할 때 undefined를 본다. .
편집 : 내가 발견, 그 실행 $ rootScope $ 시계는 문제 해결,하지만 지금까지 DRY되는 - rootScope를 사용하는 모든 범위 변수에 시계를 넣어.
오! 크롬은 나를 많이 혼란스럽게했다. 나는 그것을 몰랐다. ~보다! 나는 두 가지 해결책을 시도 할 것이다. – Jarema
btw 컨트롤러에 $ watch가없는 컨테이너에 넣으면 빈 객체 만 제공됩니다. $ watch가 여전히 필요합니다. 나는 중첩 된 범위가 작동하는 방법을 알고있다. (나는 추측한다. :)). 문제는 app.run과 컨트롤러에서 실행 된 rootScope 사이의 데이터 바인딩이 있지만 문제가 아니라는 것입니다. – Jarema
내 생각 엔 여전히 세션에 직접 바인딩하려고합니다. 당신은 확실히'$ watch'가 필요 없기 때문에 제 대답을 업데이트했습니다. –