Angular HTML binding

后端 未结 21 2651
暖寄归人
暖寄归人 2020-11-21 04:00

I am writing an Angular application and I have an HTML response I want to display.

How do I do that? If I simply use the binding syntax {{myVal}} it en

21条回答
  •  耶瑟儿~
    2020-11-21 04:43

    The way to dynamically add elements to DOM, as explained on Angular 2 doc, is by using ViewContainerRef class from @Angular/core.

    What you have to do is to declare a directive that will implement ViewContainerRef and act like a placeholder on your DOM.

    Directive

    import { Directive, ViewContainerRef } from '@angular/core';
    
    @Directive({
      selector: '[appInject]'
    })
    export class InjectDirective {
    
      constructor(public viewContainerRef: ViewContainerRef) { }
    
    }
    

    Then, in the template where you want to inject the component:

    HTML

    Then, from the injected component code, you will inject the component containing the HTML you want:

    import { Component, OnInit, ViewChild, ComponentFactoryResolver } from '@angular/core';
    import { InjectDirective } from '../inject.directive';
    import { InjectedComponent } from '../injected/injected.component';
    
    @Component({
      selector: 'app-parent',
      templateUrl: './parent.component.html',
      styleUrls: ['./parent.component.css']
    })
    export class ParentComponent implements OnInit {
    
      @ViewChild(InjectDirective) injectComp: InjectDirective;
    
      constructor(private _componentFactoryResolver: ComponentFactoryResolver) {
      }
    
      ngOnInit() {
      }
    
      public addComp() {
        const componentFactory = this._componentFactoryResolver.resolveComponentFactory(InjectedComponent);
        const viewContainerRef = this.injectComp.viewContainerRef;
        const componentRef = viewContainerRef.createComponent(componentFactory);
      }
    
      public removeComp() {
        const componentFactory = this._componentFactoryResolver.resolveComponentFactory(InjectedComponent);
        const viewContainerRef = this.injectComp.viewContainerRef;
        const componentRef = viewContainerRef.remove();
      }
    
    }
    

    I added a fully working demo app on Angular 2 dynamically add component to DOM demo

提交回复
热议问题