【发布时间】:2015-05-01 04:19:40
【问题描述】:
我正在将 AngularJS 与 Meteor 一起使用,并希望将未验证电子邮件的用户重定向到登录页面。我在/client/routes.js 中创建了一个登录视图:
app.config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider){
$urlRouterProvider.otherwise('/');
$stateProvider
.state('signin', {
url:'/signin',
views: {
main: {
templateUrl: 'client/views/profile/signin.tpl'
}
}
})
请注意,为了简洁起见,我没有列出其他州。
现在,如果用户的电子邮件尚未经过验证,我想将他们重定向到此登录页面。如何从UI-Router FAQs 修改下面的示例以满足我的需要?我可以接受不使用以下示例的其他解决方案,只要它们能解决手头的问题。
示例:使用状态配置上的数据对象来定义规则 将对用户运行逻辑的函数(此处使用示例 名为 $currentUser 的服务)。 $stateChangeStart 处理程序捕获 所有状态转换并在允许之前执行此规则检查 过渡,可能会阻止它和/或重定向到不同的 状态。
app.config(function($stateProvider) {
$stateProvider.state('privatePage', {
data: {
rule: function(user) {
// ...
}
});
});
app.run(function($rootScope, $state, $currentUser) {
$rootScope.$on('$stateChangeStart', function(e, to) {
if (!angular.isFunction(to.data.rule)) return;
var result = to.data.rule($currentUser);
if (result && result.to) {
e.preventDefault();
// Optionally set option.notify to false if you don't want
// to retrigger another $stateChangeStart event
$state.go(result.to, result.params, {notify: false});
}
});
});
【问题讨论】:
标签: angularjs meteor angular-ui-router