No se pueden resolver todos los parámetros de Clase (?)

Aug 20 2020

Actualmente estoy tratando de crear un menú dinámico en angular 9. Soy bastante nuevo en angular y recibo el siguiente mensaje de error por alguna razón: "ERROR en No puedo resolver todos los parámetros para HeadMenuComponent en C:/mypath/head- menú.componente.ts: (?, ?, ?)". El código es bastante simple:

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

}

El código se está compilando y ng serve funcionará, pero sigo recibiendo el mensaje de error. Esto es especialmente importante para mí porque el comando angular-cli:ng xi18n no se ejecutará debido a este error.

Entonces mi pregunta es: "¿Qué estoy haciendo mal?" ¿Hay otra forma de pasar objetos a un constructor? Me parece mal usar la inyección angular, solo para pasar una cadena al constructor, pero aún no he encontrado otra forma.

Respuestas

1 Ric Aug 20 2020 at 18:19

Una forma de hacerlo es hacer lo siguiente:

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

Luego, en app.module(o en otro lugar):

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

O

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

y luego consumir:

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

}