Specify @Input() parameter for Angular root component/module

前端 未结 2 661
失恋的感觉
失恋的感觉 2020-12-20 12:08

I have 3 root components that get bootstrapped by the root AppModule.

How do you go about specifying an @Input() parameter to one of those

相关标签:
2条回答
  • 2020-12-20 12:13

    As @Grégory Gossart said you can not pass @Input data as normal for bootstraped components.

    It is because an @Input is expected to come from an angular component. So, If your root app is loaded/bootstraped directly in the HTML it has not reference of what Is gonna provide that @Input, I thought.

    As good practice commented on many Angular docs, and probably because it specific behaviours, you should only bootstrap one root App. I think your option here is add a root app which you bootstrap and it imports your others(3) and use those as template in it. Then pass the @Input as normal. Really nothing special.

    I think another option could be pass the data from an @Injectable to your root apps if you decide you need to bootstrap all them and need external data. But I feel it is more refered to specific purposes.

    Edit: I took a time to find this blog I have read past day and reason why I said about @Injectable. So merits to the author, but interesting stuff. Providing external data when bootstrapping Angular 2

    0 讨论(0)
  • 2020-12-20 12:17

    As far as I know, you can not pass @Input() to a bootstraped component.

    But you can use another way to do that - pass the value as an attribute.

    index.html :

    <my-app myAttribute="myAttributeValue">
        <div>Loading...</div>
    </my-app>
    

    app.component.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');
        }
    }
    
    0 讨论(0)
提交回复
热议问题