Router._filters = {
isLoggedOut: function (pause) {
if (!Meteor.userId()) {
return this.redirect('home');
} else {
this.next();
}
},
isLoggedIn: function (pause) {
if (Meteor.userId()) {
return this.redirect('dashboard');
} else {
this.next();
}
}
};
filters = Router._filters;
Router.onBeforeAction(filters.isLoggedOut, { except: [
'home'
]});
Router.onBeforeAction(filters.isLoggedIn, { only: [
'home'
]});
我想在铁路由器中制作过滤器,这样可以重定向到“家”。当用户没有登录并且“仪表板”时如果用户已登录。一切正常,但在第一种情况下,仪表板会显示一秒钟,然后重定向完成。我该怎样摆脱这种延迟?
答案 0 :(得分:0)
我会创建一个自定义控制器。
// Global Router configuration
Router.configure({
loadingTemplate: 'loading'
notFoundTemplate: 'notFound'
controller: BaseController
});
上面的代码说:"对于所有现有路径,请使用BaseController
"
您的BaseController应该如下所示
BaseController = RouteController.extend({
action: function() {
if(!Meteor.userId()) {
// this.render('home');
// this.go('home);
this.redirect('home');
}
else {
// this.render('dashboard');
// this.go('dashboard');
this.redirect('dashboard');
}
}
})
如果您需要为每个站点提供更多控制权,请为您的特定站点提供一个控制器,该控制器继承自BaseController。它看起来应该是这样的
// Global Router configuration
// Remove the controller property!
Router.configure({
loadingTemplate: 'loading'
notFoundTemplate: 'notFound'
});
Router.map(function() {
this.route('contact', {
path: '/contact',
controller: 'ContactController'
})
});
你的ContactController应该是这样的
ContactController = BaseController.extend({
// Do something with this given route,
// e.g., give it a name property or so
name: 'contact',
action: function() {
}
})
有关更多信息,请查看Iron.Router指南。 https://github.com/EventedMind/iron-router/blob/devel/Guide.md#route-controllers