【问题标题】:How to create a controller property that updates when a service property changes如何创建在服务属性更改时更新的控制器属性
【发布时间】:2015-07-07 15:46:02
【问题描述】:

使用 Ember 1.13

我可能遗漏了一些东西,并且以完全错误的方式处理这个问题。

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

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

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

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

但是计算外部实体的属性似乎是无效的。

你知道如何做到这一点吗?

【问题讨论】:

    标签: ember.js


    【解决方案1】:

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

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

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

    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

    底线是您不需要计算属性。我建议使用Ember inspector 来检查您的会话是否正确注入到您的控制器中。

    另外,考虑使用 ember-simple-auth,这是一个在 Ember 中管理身份验证的出色插件。

    【讨论】:

    • 我实际上已经有注入件工作,我只是没有正确理解服务的范围。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    相关资源
    最近更新 更多