您可以在应用程序控制器中定义isAdmin 计算属性:
// application controller
isAdmin: Ember.computed(function() {
// your logic here
})
// application template
{{#if isAdmin}}
{{admin-header}}
{{else}}
{{user-admin}}
{{/if}}
或者您可以将其包装为带有isAdmin 属性的header-nav 组件,所以:
// application template
{{header-nav isAdmin=isAdmin}}
更新
(@Grimmy 的 ember-simple-auth 的详细信息)
1) 将currentUser 注入session(例如https://stackoverflow.com/a/30894082/4950029)
2) 在beforeModel钩子中解析currentUser并设置currentUser控制器属性:
//route
beforeModel: function() {
var self = this;
this.session.get('currentUser').then(function(user) {
self.controllerFor( self.routeName ).set('currentUser', user);
},function() {
self.controllerFor( self.routeName ).set('currentUser', null);
});
}
//controller
isAdmin: Ember.computed('currentUser.role', function() {
return (this.get('currentUser.role') === 'admin');
}),
//template
{{#if isAdmin}}
{{admin-header}}
{{else}}
{{user-admin}}
{{/if}}
或如上回答
//controller
roleBasedComponentName: Ember.computed('currentUser.role', function() {
return ((this.get('currentUser.role') === 'admin') ? 'admin-header' : 'user-header');
})
//template
{{component roleBasedComponentName user=currentUser}}