Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 在路线中注入时未定义余烬服务_Ember.js_Service_Ember Data - Fatal编程技术网

Ember.js 在路线中注入时未定义余烬服务

Ember.js 在路线中注入时未定义余烬服务,ember.js,service,ember-data,Ember.js,Service,Ember Data,当我在路由中注入服务并尝试将其访问到模型中,甚至在beforeModel中,服务不是未定义的,但当我尝试访问服务的值时,所有内容都未定义 我的服务是这样的 import Service from '@ember/service'; import { inject as service } from '@ember/service'; import RSVP from 'rsvp'; export default Service.extend({ session: service('sess

当我在路由中注入服务并尝试将其访问到模型中,甚至在beforeModel中,服务不是未定义的,但当我尝试访问服务的值时,所有内容都未定义

我的服务是这样的

import Service from '@ember/service';
import { inject as service } from '@ember/service';
import RSVP from 'rsvp';

export default Service.extend({
  session: service('session'),
  store: service(),

  load() {
    if (this.get('session.isAuthenticated')) {
      return this.get('store').queryRecord('user', { me: true }).then((user) => {
        this.set('user', user);
      });
    } else {
      return RSVP.resolve();
    }
  }
});
我的路线

import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
import RSVP from 'rsvp';

import { inject as service } from '@ember/service';

export default Route.extend(AuthenticatedRouteMixin, {
  session: service('session'),
  currentUser: service('currentUser'),

});

我想在我的模板中访问它,例如,{{currentUser.user.email}},但它只在我在组件中执行此操作时起作用。

为了从控制器访问
currentUser
服务,将服务注入控制器。路由需要首先调用
currentUser.load
方法,以便填充服务上的
user
属性。请注意,您可能只想调用一次
currentUser.load
方法,因此我建议在应用程序路由中这样做

route.js

import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
import RSVP from 'rsvp';

import { inject as service } from '@ember/service';

export default Route.extend(AuthenticatedRouteMixin, {
  session: service('session'),
  currentUser: service('currentUser'),
  model() {
    // This will load the user data before rendering
    // This can also be done in the beforeModel
    return this.get('currentUser').load();
  }
});
import Controller from '@ember/controller';
import { inject as service } from '@ember/service;

export default Controller.extend({
    currentUser: service()
});
controller.js

import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
import RSVP from 'rsvp';

import { inject as service } from '@ember/service';

export default Route.extend(AuthenticatedRouteMixin, {
  session: service('session'),
  currentUser: service('currentUser'),
  model() {
    // This will load the user data before rendering
    // This can also be done in the beforeModel
    return this.get('currentUser').load();
  }
});
import Controller from '@ember/controller';
import { inject as service } from '@ember/service;

export default Controller.extend({
    currentUser: service()
});
模板.hbs

Email: {{currentUser.user.email}}

你能发布你的代码吗?很难说没有其他猜测。你是如何访问服务和服务的值的?抱歉,伙计们,我更新了我的帖子。路由代码也请模板的上下文是控制器而不是路由,如果你想访问模板中的
currentUser
,你必须在控制器中注入服务。谢谢你的回答Garrick,这解决了我的问题。