This question already has answers here:
Closed 3 years ago.
This example shows how to use @Input() annotation on child components. My question is how do you use it on root component? For example if you modify code on the link above:
@Component({
selector: 'app',
template: `
<bank-account bank-name="RBC" account-id="4747"></bank-account>
`,
directives: [BankAccount]
})
class App {
@Input() something: string;
}
bootstrap(App);
And in html:
<app something="Test"></app>
The above example never updates something property on App component.
This Tobias Bosch's comment has answer on your question:
The reason why this is not working is that your index.html in which you place the <app something="Test"></app>
is not an angular component. Because of this, Angular won't compile this element. And Angular does not read attribute values during runtime, only during compile time, as otherwise we would get a performance hit.
So, at this moment you can't use input parameters on root element.
I think you could still use:
class App {
constructor(elm: ElementRef) {
this.something = elm.nativeElement.getAttribute('something');
}
}