我在运行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。$ apply和$ timeout($ scope。$ apply在这里没有任何意义..)在控制器中的$ scope.user,它没有任何效果。
如果我试图把$范围。在app.run $应用它gaves我
消化正在进行中
这显然是真实的,如$ HTTP通过defauly在服务中使用调用$ apply。
我在做什么错了?
我如何向角度应用程序中的所有控制器提供数据? $ rootScope不能像我想要的那样工作,或者我做错了什么?我没有办法更新模板/控制器中的数据,所以当调用app.run中的回调函数时 - 数据被填充。
感谢您的任何帮助。当我console.log($ rootScope)我看到一切 - 甚至与会议对象与正确的数据,但是当我尝试console.log($ rootScope.session)它的未定义。编辑:我发现,运行$ rootScope。$ watch解决了这个问题,但它远没有DRY--将监视放在使用rootScope的每个范围变量中。
哦! Chrome让我感到困惑......我不知道这一点。 thans! 我会尝试这两个解决方案。 – Jarema 2014-09-22 08:18:45
顺便说一句,把它放在没有监视器的容器中只给出空对象。 $手表仍然需要。我知道如何嵌套范围工作(我猜:))。我遇到的问题是在app.run和控制器中运行的rootScope之间有一些数据绑定的问题,但我很难确定。 – Jarema 2014-09-22 08:24:06
我的猜测是你仍然试图直接绑定到会话。你绝对不需要'$ watch',所以我已经更新了我的答案。 – 2014-09-22 21:31:28