복붙노트

[ANGULAR] Angular 2에서 구성 요소를 수동으로 인스턴스화 할 수 있습니까?

ANGULAR

Angular 2에서 구성 요소를 수동으로 인스턴스화 할 수 있습니까?

해결법


  1. 1.예, 지원됩니다. 예를 들어 생성자에 주입하거나 @viewChild ( 'targetName') 쿼리와 주입 할 수있는 componentresolver를 사용하여 예를 들어 획득 할 수있는 ViewComponentRef가 필요합니다.

    예, 지원됩니다. 예를 들어 생성자에 주입하거나 @viewChild ( 'targetName') 쿼리와 주입 할 수있는 componentresolver를 사용하여 예를 들어 획득 할 수있는 ViewComponentRef가 필요합니다.

    https://stackoverflow.com/a/36325468/217408 의이 코드 예제는 예를 들어 * ngfor와 함께 구성 요소를 동적으로 추가 할 수 있습니다.

    @Component({
      selector: 'dcl-wrapper',
      template: `<div #target></div>`
    })
    export class DclWrapper {
      @ViewChild('target', {read: ViewContainerRef}) target;
      @Input() type;
      cmpRef:ComponentRef;
      private isViewInitialized:boolean = false;
    
      constructor(private resolver: ComponentResolver) {}
    
      updateComponent() {
        if(!this.isViewInitialized) {
          return;
        }
        if(this.cmpRef) {
          this.cmpRef.destroy();
        }
       this.resolver.resolveComponent(this.type).then((factory:ComponentFactory<any>) => {
          this.cmpRef = this.target.createComponent(factory)
        });
      }
    
      ngOnChanges() {
        this.updateComponent();
      }
    
      ngAfterViewInit() {
        this.isViewInitialized = true;
        this.updateComponent();  
      }
    
      ngOnDestroy() {
        if(this.cmpRef) {
          this.cmpRef.destroy();
        }    
      }
    }
    
  2. from https://stackoverflow.com/questions/37063455/is-it-possible-to-manually-instantiate-component-in-angular-2 by cc-by-sa and MIT license