似乎Deps.autorun是要走的路,但是Router.go似乎不能在Deps.autorun中工作。
答案 0 :(得分:17)
以下是三个路线的示例:index
,signin
和dashboard
:
Router.configure({layoutTemplate: 'layout'});
Router.map(function() {
this.route('index', {path: '/'});
this.route('signin');
this.route('dashboard');
});
var mustBeSignedIn = function(pause) {
if (!(Meteor.user() || Meteor.loggingIn())) {
Router.go('signin');
} else {
this.next();
}
};
var goToDashboard = function(pause) {
if (Meteor.user()) {
Router.go('dashboard');
} else {
this.next();
}
};
Router.onBeforeAction(mustBeSignedIn, {except: ['signin']});
Router.onBeforeAction(goToDashboard, {only: ['index']});
如果用户在index
页面上且她已登录,则她将自动路由到dashboard
页面。在signin
以外的任何页面上,如果用户未登录,她将被路由到signin
页面。 onBeforeAction
是被动的,因此如果用户登录或退出,将立即强制执行这些规则。
当然你的路线会有所不同,但希望这个例子说明了一种方法可以使用铁路由器。
另请参阅using hooks的iron-router guide部分。
答案 1 :(得分:7)
上面的一些事情似乎已经过时了。以下是我现在的工作方式:
Router.configure({
layoutTemplate: 'Layout'
});
Router.map(function() {
this.route('index', {path: '/'});
this.route('login');
this.route('home');
});
var mustBeSignedIn = function() {
if (!(Meteor.user() || Meteor.loggingIn())) {
Router.go('login');
} else {
this.next();
}
};
var goHome = function() {
if (Meteor.user()) {
Router.go('home');
} else {
this.next();
}
};
Router.onBeforeAction(mustBeSignedIn, {except: ['login']});
Router.onBeforeAction(goHome, {only: ['index', 'login']});
答案 2 :(得分:4)
var mustBeSignedIn = function(pause) {
if (!(Meteor.user() || Meteor.loggingIn())) {
Router.go('signin');
} else {
this.next();
}
};
var goToDashboard = function(pause) {
if (Meteor.user()) {
Router.go('dashboard');
} else {
this.next();
}
};
仅供参考,暂停()现在不支持,只需替换为this.next()