使用Ember 1.13
我可能会错过一些东西并以完全错误的方式解决这个问题。
我将会话状态保存在可供所有控制器使用的余烬服务中。它有一个布尔属性isExistingSession。
在我的应用程序的标题中,我想有条件地显示登录按钮或用户信息,具体取决于isExistingSession的值。
据我所知,我不能直接在我的车把中使用服务属性,所以我的解决方案是在applicationController上创建一个计算属性,该属性总是等于sessionService上isExistingSession的值
export default Ember.Controller.extend({
isExistingSession: function () {
return sessionService.get('isExistingSession');
}.property('sessionService.isExistingSession'),
但是,计算外部实体的财产似乎是无效的。
关于如何做到这一点的任何想法?
答案 0 :(得分:1)
据我所知,我不能直接在我的车把中使用服务属性
只是为了澄清:给定控制器中的任何可用属性都将在其关联模板中提供。因此,如果您在应用程序控制器中注入会话服务,则应该能够在application.hbs
模板中使用该服务的任何属性。
现在解决您的问题:如何在控制器中注入服务?您有两种选择:
application.inject('controller', 'sessionService', 'service:session');
这将在所有控制器中注入会话服务,同时也可用于所有模板。 (见http://guides.emberjs.com/v1.10.0/understanding-ember/dependency-injection-and-service-lookup/)sessionService: Ember.inject.service('session'),
这会将您的会话服务注入单个控制器(请参阅http://emberjs.com/api/classes/Ember.inject.html#method_service)底线是您不需要计算属性。我建议使用Ember inspector检查您的会话是否已在控制器中正确注入。
另外,请考虑使用ember-simple-auth,一个非常棒的附加组件来管理Ember中的身份验证。