首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未明错误:无法解析所有参数

未明错误:无法解析所有参数
EN

Stack Overflow用户
提问于 2018-03-14 09:06:29
回答 1查看 442关注 0票数 0

我正在学习Angular5和如何在deps中使用useFactory。目前,在我的Angular应用程序中,我有、one组件、三种服务。

这是组件

代码语言:javascript
复制
// email.component.ts
import { Component, OnInit, Inject } from '@angular/core';

@Component({
  ...
})
export class EmailComponent implements OnInit {
  private currentEmail: string;
  private companyName: string;

  constructor(@Inject('EMS') private emailService) { }

  ngOnInit() {
    this.currentEmail = this.emailService.emailServiceName;
  }
}

模板是

代码语言:javascript
复制
// email.component.html
<p>Your Current Email Service is : {{ currentEmail }}</p>

这是app.module.ts

代码语言:javascript
复制
...
import { EmailComponent } from './components/email/email.component';
import { EmailService } from './email-service';
import { HotMail } from './hot-mail';
import { YahooMail } from './yahoo-mail';


function HotMailOrYahooMail(x) {
  if (x.isHotMail) {
    return new HotMail();
  } else {
    return new YahooMail();
  }
}
@NgModule({
  ...
  providers: [
    EmailService,
    {
      provide: 'EMS',
      useFactory: HotMailOrYahooMail,
      deps: [EmailService]
    }
  ],
  ...
})
export class AppModule { }

逻辑是指EmailComponent应该呈现从HotMail服务或YahooMail服务返回的值,并且该逻辑位于 EmailService上,即EmailService具有一个名为isHotMailE 124的属性,如果它的值为真<e 225则D26应该指向HotMail服务、E 128否则它应该指向YahooMail服务。

这是EmailService

代码语言:javascript
复制
export class EmailService {
    constructor(public isHotMail: boolean) {
        this.isHotMail = true;
    }
}

和HotMail服务:

代码语言:javascript
复制
export class HotMail {
  public emailServiceName = 'HotMail by Microsoft';
}

和YahooMail服务:

代码语言:javascript
复制
export class YahooMail {
  public emailServiceName = 'YahooMail by Yahoo';
}

然而,,,在运行ng serve时,我得到了以下错误:

代码语言:javascript
复制
Uncaught Error: Can't resolve all parameters for EmailService: (?).
        at syntaxError (compiler.js:485)
        at CompileMetadataResolver._getDependenciesMetadata (compiler.js:15699)
        at CompileMetadataResolver._getTypeMetadata (compiler.js:15534)
        at CompileMetadataResolver._getInjectableMetadata (compiler.js:15514)
        at CompileMetadataResolver.getProviderMetadata (compiler.js:15874)
        at eval (compiler.js:15785)
        at Array.forEach (<anonymous>)
        at CompileMetadataResolver._getProvidersMetadata (compiler.js:15745)
        at CompileMetadataResolver.getNgModuleMetadata (compiler.js:15313)
        at JitCompiler._loadModules (compiler.js:34404)

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-03-14 09:11:21

我的错,我应该用这个

代码语言:javascript
复制
export class EmailService {
    public isHotMail = true;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49273506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档