如何创建在服务属性更改时更新的控制器属性

时间:2015-07-07 15:46:02

标签: ember.js

使用Ember 1.13

我可能会错过一些东西并以完全错误的方式解决这个问题。

我将会话状态保存在可供所有控制器使用的余烬服务中。它有一个布尔属性isExistingSession。

在我的应用程序的标题中,我想有条件地显示登录按钮或用户信息,具体取决于isExistingSession的值。

据我所知,我不能直接在我的车把中使用服务属性,所以我的解决方案是在applicationController上创建一个计算属性,该属性总是等于sessionService上isExistingSession的值

export default Ember.Controller.extend({
  isExistingSession: function () {
    return sessionService.get('isExistingSession');
  }.property('sessionService.isExistingSession'),

但是,计算外部实体的财产似乎是无效的。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

  

据我所知,我不能直接在我的车把中使用服务属性

只是为了澄清:给定控制器中的任何可用属性都将在其关联模板中提供。因此,如果您在应用程序控制器中注入会话服务,则应该能够在application.hbs模板中使用该服务的任何属性。

现在解决您的问题:如何在控制器中注入服务?您有两种选择:

  1. application.inject('controller', 'sessionService', 'service:session');这将在所有控制器中注入会话服务,同时也可用于所有模板。 (见http://guides.emberjs.com/v1.10.0/understanding-ember/dependency-injection-and-service-lookup/
  2. sessionService: Ember.inject.service('session'),这会将您的会话服务注入单个控制器(请参阅http://emberjs.com/api/classes/Ember.inject.html#method_service
  3. 底线是您不需要计算属性。我建议使用Ember inspector检查您的会话是否已在控制器中正确注入。

    另外,请考虑使用ember-simple-auth,一个非常棒的附加组件来管理Ember中的身份验证。