Tengo 3 componentes raíz que son arrancados por el AppModule raíz.
¿Cómo hace para especificar un parámetro @Input() a uno de esos componentes?
Ninguno de los dos
<app-modal [id]="'hard-coded value'"></app-modal> <app-modal [id]="constantExportedByAppmodule"></app-modal> son recogidos por AppModalComponent :
@Input() id: string;Es indefinido.
Hasta donde yo sé, no puede pasar @Input() a un componente de arranque.
Pero puede usar otra forma de hacerlo: pase el valor como un atributo.
índice.html:
<my-app myAttribute="myAttributeValue"> <div>Loading...</div> </my-app>aplicación.componente.ts:
@Component({ selector: 'my-app', templateUrl: 'app.component.html', styleUrls: ['app.component.css'] }) export class AppComponent { constructor(private elementRef:ElementRef) { let myAttribute = this.elementRef.nativeElement.getAttribute('myAttribute'); } }Como dijo @Grégory Gossart, no puede pasar los datos @Input como de costumbre para los componentes de arranque.
Es porque se espera que una @Input provenga de un componente angular. Entonces, si su aplicación raíz se carga/arranca directamente en el HTML, no tiene referencia de lo que proporcionará esa @Input, pensé.
Como buena práctica comentada en muchos documentos de Angular, y probablemente debido a comportamientos específicos, solo debe iniciar una aplicación raíz. Creo que su opción aquí es agregar una aplicación raíz que arranca e importa sus otras (3) y las usa como plantilla en ella. Luego pase @Input como de costumbre. Realmente nada especial.
Creo que otra opción podría ser pasar los datos de un @Injectable a sus aplicaciones raíz si decide que necesita arrancarlas todas y necesita datos externos. Pero siento que se refiere más a propósitos específicos.
Editar: Me tomé un tiempo para encontrar este blog que leí el día anterior y por eso dije sobre @Injectable. Así que méritos para el autor, pero cosas interesantes. Proporcionar datos externos al arrancar Angular 2