【问题标题】:ES6 Aurelia dependency injection confusionES6 Aurelia 依赖注入混淆
【发布时间】:2015-12-18 07:17:44
【问题描述】:

根据我在博客上阅读的内容,这是您在 Aurelia 和 ES6 中执行 DI 的方法,但它不起作用。

diag.js:

export class Diag  {
  constructor(){
      this.test = `success`;
  }
}

testservice.js:

import {inject} from 'aurelia-framework';
import {Diag} from './diag';

@inject(Diag)
export class TestService{ 
  constructor(diag){
    console.log(diag);
  }
}

>undefined.

在控制台中,我只得到“未定义”。但是,如果我在没有 DI 的情况下这样做,它可以正常工作:

import {Diag} from './diag';

export class TestService{ 
  constructor(){
    console.log(Diag);
  }
}

因此,如果我在没有 DI 的情况下导入它,它可以工作,但是一旦我尝试像在在线示例中看到的那样执行 DI,它会告诉我该类是未定义的。我很困惑。有什么帮助吗?

【问题讨论】:

  • 对我来说它工作正常,但我正在使用带有 @autoinject 的 TypeScript。也许它与转译器有关?另外,您使用的是最新的 aurelia 版本(测试版)吗?
  • 迈克说得好。我正在使用 Beta 1。昨天他们刚刚发布了 beta 2,我应该下载它。我只是担心 Beta 2 中的某些内容可能会破坏我的 Beta 1 代码,然后我会有更多问题需要调试。我想我作为一名 MS 开发人员多年来一直很偏执。哈哈
  • 更正 - 昨天只是一个补丁版本,不是 Beta 2。
  • 我做了一个 jspm 更新,一切都变得清晰起来。现在一切都很好。 :-)

标签: javascript dependency-injection ecmascript-6 aurelia


【解决方案1】:

确保您使用依赖注入来获取TestService 的实例。

import {inject} from 'aurelia-framework';
import {TestService} from './test-service';

@inject(TestService)
export class App { 
  constructor(service) {
    ...
  }
}

【讨论】:

  • 嗨 Jeremy - 感谢您在 Aurelia 上所做的所有写作。我一直在使用你的博客来学习很多东西。 :-) 关于这个 DI 问题,我在 viewmodel js 文件中将 DI 与我的 TestService 一起使用。奇怪的是,我猜由于 Aurelia 仍处于测试阶段,因此不同的博客文章会显示不同的代码,更不用说有时也会有 TS 示例代码。例如,在 Eisenberg 的一篇文章中,他说您必须将构造函数声明为 Constructor(diag: Diag) { ... 这也会引发错误。我想有很多东西要学。
  • 我做了一个 jspm 更新,一切都变得清晰起来。此外,我提到的 Eisenberg 建议现在也在起作用。 :-)
猜你喜欢
  • 2011-12-16
  • 1970-01-01
  • 2021-06-29
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
相关资源
最近更新 更多