【问题标题】:Can't resolve all parameters for Class (?)无法解析 Class (?) 的所有参数
【发布时间】:2020-12-09 17:10:34
【问题描述】:

我目前正在尝试在 Angular 9 中创建一个动态菜单。我对 Angular 很陌生,并且由于某种原因收到以下错误消息: “错误无法解析 C:/mypath/head-menu.component.ts 中 HeadMenuComponent 的所有参数:(?, ?, ?)。”代码很简单:

import { Component, OnInit, Inject, Injectable } from '@angular/core';

  @Component({
    selector: 'app-head-menu',
    templateUrl: './head-menu.component.html',
    styleUrls: ['./head-menu.component.css']
  })

  export class HeadMenuComponent implements OnInit {
    imageURL: string;
    text: string;
    menuFunction: () => void;

  constructor(@Inject(String)imageURL: string, @Inject(String)text: string, 
              @Inject(Function)functionToAccept: () => void) {
    this.imageURL = imageURL;
    this.text = text;
    this.menuFunction = functionToAccept;
   }


  ngOnInit(): void {
  }

}

代码正在编译,ng serve 可以工作,但我仍然收到错误消息。这对我来说尤其重要,因为 angular-cli command:ng xi18n 不会因为这个错误而运行。

所以我的问题是:“我做错了什么?”还有另一种方法可以将对象传递给构造函数吗?使用角注入感觉不对,只是为了给构造函数传一个字符串,但是我还没有找到其他方法。

【问题讨论】:

    标签: angular angular-cli angular-components constructor-injection


    【解决方案1】:

    这样做的一种方法是执行以下操作:

    export const IMAGE_URL = new InjectionToken<string>('imageUrl');

    然后,在app.module(或其他地方):

    {
      provide: IMAGE_URL ,
      useValue: 'www.someurl.com'
    }
    

    或者

    {
      provide: IMAGE_URL,
      deps: [ConfigService],   //dependencies
      useFactory: (c: ConfigService) => {
          return c.someUrlValue();
      }
    }
    

    然后消费:

    constructor(@Inject(IMAGE_URL) imageUrl: string) {
    
    }
    

    【讨论】:

    • 当然,您不必静态定义它。 provide 也可以接受一个工厂函数,它也可以接受服务等,所以理论上你可以做你想做的事。我会用建议更新答案
    • 谢谢,我去测试一下。
    • 你测试了吗:)
    • 遗憾的是它对我没有用。我选择了另一种方式,然后 ng xi18n 来实现我的语言。我现在可以结束这个问题,但也许其他人也有同样的问题。@Ric
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 2017-09-26
    • 2018-03-24
    • 1970-01-01
    • 2016-11-27
    • 2018-05-16
    相关资源
    最近更新 更多