【发布时间】:2015-12-03 04:40:34
【问题描述】:
我有这么简单的场景,
应用程序从主视图(/main)开始,然后点击右上角的按钮到子视图(/sub)。
在应用启动期间app.run(),用户的个人资料将被加载到服务userService,一旦用户进入子视图,此个人资料将从该服务userService读取然后显示,这里是代码,
app.run(function($http, $rootScope, userService){
$http.get('/profile').then(function(result){
userService.setProfile(result.data.profile);
});
});
app.service('userService', function(){
var user = {}
this.setProfile(profile){
user.profile = profile;
};
this.getProfile(){
return user.profile;
}
});
在子视图中,调用getProfile() 来显示信息。
如果用户从主视图 -> 按钮 -> 子视图开始,它可以工作,但是,如果用户手动刷新子视图或只是从子视图开始,getProfile() 将没有任何显示,我知道这是因为在@之前987654330@ 获取配置文件返回,子视图已进行。
我不喜欢直接动态地从子视图中读取个人资料,因为我有其他页面也需要个人资料信息,那么有什么解决方法或更好的设计吗?谢谢。
【问题讨论】:
-
您可以在加载子视图之前解析配置文件:stackoverflow.com/questions/19937751/…
-
run 不会等待请求完成...如前所述在路由器中使用
resolve。如果使用 ui-router 和父状态,问题真的很简单 -
@BroiSates @charlietfl 我觉得
resolve不太方便,我必须配置每个路由器以将配置文件注入其控制器 -
这就是为什么使用 ui-router 和父状态如此有用,您在父级别只有一个解决方案
-
@charlietfl 会预加载初始化数据,然后手动进行角度引导,在应用程序运行中设置这个
userService是一个好习惯吗?
标签: ajax angularjs angularjs-service