14

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.

1

2 Answers 2

23

I think you could still use:

class App {
    constructor(elm: ElementRef) {
        this.something = elm.nativeElement.getAttribute('something'); 
    }
}
Sign up to request clarification or add additional context in comments.

4 Comments

This works perfectly fine. ElementRef can be imported from angular2//core.
Thank you very much. :-) Works perfect with static values!
ElementRef is marked with SECURITY RISK label, so be careful using it.
This will not work if you are using angular universal to render on the server for SEO.
21

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.

2 Comments

how to pass array of objects from express/jade to an angular2 component? I wanted to bind that way and it doesn't work.
If it has the @Component decorator, how is it not an angular component?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.