Me doy cuenta de que esta es una pregunta algo más antigua, pero solo quería señalar que ha agregado la variable del modelo a su clase de widget de prueba de manera incorrecta. Si necesita una variable de modelo, no debería intentar pasarla a través del constructor del componente. Solo tiene la intención de aprobar servicios u otros tipos de inyectables de esa manera. Si está creando una instancia de su widget de prueba dentro de otro componente y necesita pasar un objeto de modelo como, le recomendaría usar el núcleo angular OnInit y los patrones de diseño de entrada / salida.
Como ejemplo, su código realmente debería verse así:
import { Component, Input, OnInit } from "@angular/core";
import { YourModelLoadingService } from "../yourModuleRootFolderPath/index"
class Model {
param1: string;
}
@Component({
selector: "testWidget",
template: "<div>This is a test and {{model.param1}} is my param.</div>",
providers: [ YourModelLoadingService ]
})
export class testWidget implements OnInit {
@Input() model: Model;
private _model: Model;
constructor(
private _yourModelLoadingService: YourModelLoadingService //This service should
//usually be provided at the module level, not the component level
) {}
ngOnInit() {
this.load();
}
private load() {
}
}
Una clase que es esencialmente solo una estructura / modelo no debe inyectarse, porque significa que solo puede tener una instancia compartida única de esa clase dentro del alcance que se proporcionó. En este caso, eso significa que el inyector de dependencias crea una única instancia de Model cada vez que se crea una instancia de testWidget. Si se proporcionara a nivel de módulo, solo tendría una instancia compartida entre todos los componentes y servicios dentro de ese módulo.
En su lugar, debe seguir las prácticas estándar orientadas a objetos y crear una variable de modelo privado como parte de la clase, y si necesita pasar información a ese modelo cuando crea una instancia de la instancia, debe ser manejada por un servicio (inyectable) proporcionado por el módulo padre. Así es como se pretende que tanto la inyección de dependencia como la comunicación se realicen en angular.
Además, como algunos de los otros mencionaron, debe declarar sus clases modelo en un archivo separado e importar la clase.
Recomendaría encarecidamente volver a la referencia de documentación angular y revisar las páginas básicas sobre las diversas anotaciones y tipos de clases:
https://angular.io/guide/architecture
Debe prestar especial atención a las secciones sobre módulos, componentes y servicios / inyección de dependencia, ya que son esenciales para comprender cómo usar Angular a nivel arquitectónico. Angular es un lenguaje de arquitectura muy pesada porque es de muy alto nivel. La separación de preocupaciones, las fábricas de inyección de dependencia y el control de versiones de javascript para la comparabilidad del navegador se manejan principalmente por usted, pero debe usar la arquitectura de su aplicación correctamente o encontrará que las cosas no funcionan como espera.