ui-router resolve中的流星集合
Meteor collection in ui-router resolve
我试图使用meteor angular js ui-router resolve来加载从用户列表中选择的一个用户的信息。
$stateProvider
.state('userprofile', {
url: '/user/:userId',
cache: false,
template: '<user-profile userinfo="$resolve.userinfo"></user-profile>',
controller: UserProfile,
controllerAs: name,
resolve: {
userinfo: function($stateParams) {
viewedUser = Meteor.users.findOne({
_id: $stateParams.userId
});
return viewedUser;
},
}
});
问题是,第一次从用户列表后,用户配置文件显示正确。但是,页面重新加载会使userinfo变为未定义。我猜想从第二次开始,控制器已经加载了,所以它在解析完成之前显示?!
搜索了一会儿后,我尝试了$q和$timeout
resolve: {
userinfo: function($stateParams, $q, $timeout) {
deferred = $q.defer();
$timeout(function() {
deferred.resolve(Meteor.users.findOne({
_id: $stateParams.userId
}));
}, 1000);
return deferred.promise;
},
}
如我所料,每次刷新页面都会显示用户配置文件。但如果我将延迟降低到500,刷新时它就会回到undefined。我不知道为什么在这种情况下,更长的延迟工作?
谢谢!
这是我使用的代码,
解决:{currentUser: ($q) => {Var deferred = $q.defer();
Meteor.autorun(function () {
if (!Meteor.loggingIn()) {
if (Meteor.user() == null) {
deferred.reject('AUTH_REQUIRED');
} else {
deferred.resolve(Meteor.user());
}
}
});
return deferred.promise;
}
}
这是来自@urigo某处的教程,花了我一些时间才找到,但它像一个魅力。
这段代码可以方便地捕获需要身份验证的情况—将其放在.run方法
的顶层function run($rootScope, $state) {
'ngInject';
$rootScope.$on('$stateChangeError',
(event, toState, toParams, fromState, fromParams, error) => {
console.log("$stateChangeError: "+error);
if (error === 'AUTH_REQUIRED') {
$state.go('login');
}
}
);
}
您可以在resolve
中尝试此路由。如果你使用角流星
resolve: {
'loginRequired': function ($meteor, $state) {
return $meteor.requireUser().then(function (user) {
if (user._id) {return true;}
}).catch(function () {
$state.go('login');
return false;
});
}
}
相关文章:
- 如何查找流星集合中最后一个元素/对象的id
- 上传与流星集合相关的图像
- 如何用图形填充流星集合并单独显示它们
- 如何使流星集合非反应性取决于网址
- 在流星集合文档中插入值
- 为什么将数据加载到流星集合中需要这么长时间
- 一个物体来自什么流星集合
- 流星集合不会在刷新时加载
- 将特定字段从流星集合文档中检索到JS文件中并去除HTML标签
- 专用文件中的流星集合
- 更新流星集合中的子数组列表
- 如何替换流星集合查询中的排序关键字字段
- 基于当前用户属性发布流星集合
- 流星集合findOne在回调中调用时返回undefined
- Angular流星集合onchange
- ui-router resolve中的流星集合
- 处理流星集合中可变的键值对(无模式困境)
- 流星集合在服务器上是空的
- 改变流星.集合
- 流星集合未在客户端更新订阅