2014-04-06 36 views

Trả lời

17

Dưới đây là một ví dụ với ba tuyến đường: index, signindashboard:

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']}); 

Nếu người dùng là trên trang index và cô được đăng nhập vào, cô sẽ tự động được chuyển đến trang dashboard. Trên bất kỳ trang nào ngoại trừ signin, nếu người dùng chưa đăng nhập, cô ấy sẽ được chuyển đến trang signin. onBeforeAction có phản ứng nên các quy tắc này sẽ được thực thi ngay lập tức nếu người dùng đăng nhập hoặc đăng xuất.

Tất nhiên các tuyến đường của bạn sẽ khác nhau, nhưng hy vọng ví dụ này minh họa một cách để thực hiện công việc này với bộ định tuyến sắt.

Cũng xem phần using hooks của iron-router guide.

+0

'goToPick' là gì? – Warz

+0

Đó là một lỗi đánh máy. Cảm ơn bạn đã chỉ ra điều đó. –

+1

Sử dụng phương pháp này, bạn cần tạo chỉ mục mẫu trống. Đúng? Nếu không, Meteor sẽ ném một ngoại lệ. –

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(); 
    } 
}; 

FYI, tạm dừng() không được hỗ trợ bây giờ, chỉ cần thay thế với this.next()

7

Một vài điều trên dường như là lỗi thời. Dưới đây là cách tôi làm việc tại thời điểm hiện tại:

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']}); 
Các vấn đề liên quan