角度.js - 在控制器中等待服务从服务器返回值
Angular.js - In controller wait until service returns value from server
在我的Angular.js应用程序中,我遇到了这样的问题。我有名为 user
的服务,我在app.run
上调用它以从服务器获取用户数据,如下所示:
app.run(function (user, tracking) {
user.initialize();
... // some other code goes here..
});
这仅调用 API 路由并创建可通过所有应用程序使用的$rootScope.user
。
但不知何故,控制器不时加载得比初始化速度更快......并且其中$rootScope
不包含user
对象。
function SomeController($scope, $rootScope, $routeParams) {
console.log($rootScope.user.name);
// sometimes returns error -
// TypeError: Cannot read property 'name' of undefined
}
那么我怎样才能强制所有控制器仅在初始化后加载$rootScope
一切顺利。我不想在每个控制器中为用户添加$watch
。"因为它看起来像是错误的决定,使代码变得丑陋。
您的建议?谢谢!
我的解决方案是使用$routeProvider.when()
方法resolve
选项。
这将防止控制器在数据请求完成之前加载:
$routeProvider.when('/books', {
templateUrl: 'books',
controller: 'bookCtrl',
resolve: {
appUser: function (user) {
// we're injecting "user" service
// and initiliazing it (this method returns $promise)
return user.initialize();
}
}
});
在bookCtrl
内部只是将appUser
作为依赖项注入。
我遇到了同样的问题。我找到的唯一解决方案是在rootScope中创建一些函数并从控制器调用它。所以app.run函数内部有这样的东西:
scope.initUser = function () {
if (!user){
// create
user.initialize();
}
};
然后我的控制器在开始时调用它:
$rootScope.initUser();
不要忘记将$rootScope注入控制器。
这个解决方案并不假装优雅,但至少它有效......
如果有人提出更好的解决方案,我将不胜感激...
相关文章:
- 通过服务Angular向服务器发送$routeParam
- Node.JS:从服务器端内存服务文件与服务器端文件
- 从服务器获取数据,并使用$http服务和ng-change在select事件上显示它
- Angular:将对象存储在服务中以在视图中显示和将crud函数存储到服务器的最佳方式是什么
- 服务回调中的KendoUI网格服务器动态列绑定
- 内部服务器错误在 post 请求中使用 Angular js 中的自定义服务
- 服务工作者请求,服务器不断响应
- 将控制器与与服务器交互的服务分离的任何好处
- 从另一台服务器获取node.js中的服务映像
- 只有在angular服务从服务器获取数据并完成执行后,才能执行特定的代码块
- 移动服务服务器脚本(计划)是否可以访问其他Sql Azure数据库
- Socket.io 不是由 Node.js 服务器提供服务的
- 使用REST POST服务,当服务器接收到请求时输入为空
- 如何在使用Webpack后在静态服务器上服务我的React web应用程序
- WCF服务无法在托管服务器上运行的原因
- 如何将.js文件包含到由复合服务器提供服务的html文件中
- 如何使用javascript从远程服务器上使用.net web服务
- Angular远程服务器web服务授权
- node.js服务器无法在虚拟机(Azure云服务)中工作
- Azure移动服务-服务器端脚本-使用===与零进行比较