Ember 生成的服务在注入时引发错误

Ember generated service raising error on injection

我是 EmberJS 的新手,正在学习教程。我在教程的一部分开始谈论创建服务并将它们注入您的控制器(我不是 100% 确定它是否是控制器,但我来自 AngularJS,它看起来非常相似).

在我的 Ember 项目的终端中,我 运行 命令 ember g service authentication。我可以看到该服务是在我的应用程序的服务目录中的文件 authentication.js 中创建的。然而,当我尝试将它注入我的控制器时,当我在本地提供应用程序时,我在浏览器中遇到了这个问题,

Error: Assertion Failed: Attempting to inject an unknown injection: 'service:authentication

这可能是因为我使用的 Ember 版本比教程中的版本更新,并且现在有不同的方式来注入服务?我问是因为这是教程中服务的语法

import ember from 'ember'

export default Ember.Service.extend({
  records: []
});

这是我现在拥有的语法,是在使用 ember new

构建项目时自动创建的
import Service from '@ember/service';

export default Service.extend({
  records: []
});

org.js "Where service is being injected"

import Route from '@ember/routing/route';

export default Route.extend({

  authentication: Ember.inject.service(),

  setupController(controller) {
    this._super(...arguments);
  }
});

在 ember 版本 2.16 中,您可以利用 javascript 模块 api 进行导入。
Refer this blog post
Refer this full list

如果您的 ember 版本低于 2.16,则

import ember from 'ember'

export default Ember.Service.extend({
  records: []
});

如果ember 版本 >= 2.16 那么下面是正确的导入方式,

import Service from '@ember/service';

export default Service.extend({
  records: []
});

看起来您正在使用 Ember 2.16(正如其他人所回答的那样,它使用了新的组件模块化,您正在学习的教程看起来像 2.15 或更早版本,正如您在 post).

您也应该在新路线中使用新模块是有道理的:

import Route from '@ember/routing/route';
import { inject as service } from "@ember/service";

export default Route.extend({
  authentication: service()
});

声明:您显示的代码是 route class(路由层次结构中有 controllers,也有 components 不是路由层次结构的一部分)。您将能够在任何提到的级别中注入您的全新服务。

谢谢大家关于EmberJS.However的所有信息原来我需要做的就是重启我的本地服务器-.-