简体   繁体   English

Angular:如何调用动态创建组件的构造函数?

[英]Angular: How to call constructor of dynamically created component?

Can someone help me out how to pass on a value for the constructor of a component which is created dynamically?有人可以帮我解决如何为动态创建的组件的构造函数传递值吗?

This is how the component FilterComponent is created:这就是组件FilterComponent的创建方式:

import { Component, ComponentFactory, ComponentFactoryResolver, ComponentRef, OnInit, ViewChild, ViewContainerRef } from '@angular/core';
import { FilterComponent } from '../filter/filter.component';

export enum FilterType {
  DateRangeFilter, SensorSelectFilter
}

@Component({
  selector: 'app-filter-collection',
  templateUrl: './filter-collection.component.html',
  styleUrls: ['./filter-collection.component.css']
})
export class FilterCollectionComponent implements OnInit {

  filters: Array<ComponentRef<FilterComponent>> = [];

  @ViewChild("messagecontainer", { read: ViewContainerRef }) entry!: ViewContainerRef;

  constructor(private resolver: ComponentFactoryResolver) { }

  onAddDateRangeFilter() {
    const factory: ComponentFactory<FilterComponent> = this.resolver.resolveComponentFactory(FilterComponent);
    const filter = this.entry.createComponent<FilterComponent>(factory);
    this.filters.push(filter);
  }

  ngOnInit(): void {
  }

}

and this is the component:这是组件:

@Component({
  selector: 'app-filter',
  templateUrl: './filter.component.html',
  styleUrls: ['./filter.component.css']
})
export class FilterComponent {

  constructor(private type : FilterType) {
  }

  ngOnInit(): void {

  }

}

I am not sure if there is a way to access the constructor.我不确定是否有办法访问构造函数。 But there is a way to get the actual instance of your dynamically generated component但是有一种方法可以获取动态生成的组件的实际实例

import { Component, ComponentFactory, ComponentFactoryResolver, ComponentRef, OnInit, ViewChild, ViewContainerRef } from '@angular/core';
import { FilterComponent } from '../filter/filter.component';

export enum FilterType {
  DateRangeFilter, SensorSelectFilter
}

@Component({
  selector: 'app-filter-collection',
  templateUrl: './filter-collection.component.html',
  styleUrls: ['./filter-collection.component.css']
})
export class FilterCollectionComponent implements OnInit {

  filters: Array<ComponentRef<FilterComponent>> = [];

  @ViewChild("messagecontainer", { read: ViewContainerRef }) entry!: ViewContainerRef;

  constructor(private resolver: ComponentFactoryResolver) { }

  onAddDateRangeFilter() {
    const factory: ComponentFactory<FilterComponent> = this.resolver.resolveComponentFactory(FilterComponent);
    const filter:ComponentRef<FilterComponent> = this.entry.createComponent<FilterComponent>(factory);
        this.filters.push(filter);
// you can use the componentRef.instance to reference any variables inside your dynamically generated component 
       filter.instance.type = FilterType.DateRangeFilter



  }

  ngOnInit(): void {
  }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM