Не удается разрешить все параметры для класса (?)

Aug 20 2020

В настоящее время я пытаюсь создать динамическое меню в angular 9. Я новичок в angular и по какой-то причине получаю следующее сообщение об ошибке: «ERROR in Can't resolve all parameters for HeadMenuComponent in C: / mypath / head- menu.component.ts: (?,?,?) ". Код довольно прост:

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: ng xi18n не запускается из-за этой ошибки.

Итак, мой вопрос: «Что я делаю не так?» Есть ли другой способ передать объекты в конструктор? Мне кажется неправильным использовать угловую инъекцию, просто чтобы передать строку конструктору, но я еще не нашел другого способа.

Ответы

1 Ric Aug 20 2020 at 18:19

Один из способов сделать это - сделать следующее:

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) {

}