Angular 2 - It is possible to bind the app compone

2019-04-29 06:18发布

问题:

I try to bootstrap my main angular component in a pre-executed HTML Document. This is my existing DOM :

<html>
<head></head
<body>

<!-- this is my template generated with Symfony -->
<div ...>
 <ul>
   <li><angularComponent></angularComponent></li>
   <li><angularComponent></angularComponent></li>
 </ul>
</div>

</body>
</html>

I want to bind my Main App Component (or Directive) on body, or on the main div, without replacing my pre generated content (with symfony).

It is possible ? Have you other solution ?

Thanks,

回答1:

Usually this is done by adding <ng-content></ng-content> to the template of your Angular AppComponents template, but AFAIK this is not supported on the application component, only on child components.

You could try to set encapsulation: ViewEncapsulation.Native on the AppComponent und use <content></content> instead of <ng-content></ng-content>.

I haven't tried this myself yet.



回答2:

Ok, so i haven't found any good answers to this question, here's the (hacky) way I did it:

document.getExistingContentByTag = function(tagName){
    var target = document.getElementsByTagName(tagName)[0];

    if(!target || !target.tagName) return '';

    return target.innerHTML;
}

And to render the template:

@Component({
selector: 'my-app',
template: document.getExistingContentByTag('my-app')
})

So it pulls the content of the my-app tag, does its magic and writes it back.



标签: bind angular