代码之家  ›  专栏  ›  技术社区  ›  Patricio Vargas

如何在按钮单击时多次创建现有组件-角度

  •  0
  • Patricio Vargas  · 技术社区  · 6 年前

    我试图创建一个组件多次在一个按钮点击。该按钮位于父组件中,当单击“添加更多”时,它将创建子组件的次数与单击“添加更多”的次数相同。默认情况下,只有一个子组件显示,然后当我们单击按钮时,相同的子组件将添加到现有的子组件之后。

    如何在单击按钮时多次创建现有子组件?

    我应该使用组件工厂还是简单的forLoop?

    HTML-子组件

    <input type="text />
    

    HTML-父组件

    <child-component #childCom></child-component>
    
    <button (click)="addMore()">Add more</button>
    

    TS公司

    @ViewChild('childCom') childCom: ElementRef;
    
    addMore(){
         console.log("child component");
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Lazar Ljubenović    6 年前

    这个主意

    使用for循环多次显示组件。

    阵列

    每次您要添加一个新项时,我们都会将另一项添加到数组中(例如,数组可以是 0 , 1 2 或者你可以保留一些状态——这取决于你的应用程序)。

    public items = []
    
    public add () {
      this.items = [...this.items, this.items.length]
    }
    

    模板

    add 方法。

    <button (click)="add()">Add</button>
    

    <child-component *ngFor="let item of items"></child-component>
    

    流动

    当用户单击按钮时,方法 添加 被称为。这将使数组的长度增加1。 ngFor 注意到这一点并呈现另一项。

        2
  •  1
  •   Ali Shahbaz    6 年前

    使用 ComponentFactoryResolver 为了这个

    添加 ng-template 在HTML页面中生成动态组件

    <child-component #childCom></child-component>
    <ng-template #container></ng-template>
    

    @ViewChild('container', { read: ViewContainerRef }) container: ViewContainerRef;
    input = InputComponent;
    
      constructor(private componentFactoryResolver: ComponentFactoryResolver) {
    
      }
    

    InputComponent 子组件是否符合您的代码

    add() {
        const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.input);
        const component = this.container.createComponent(componentFactory);
      }
    

    别忘了在中引导您的子组件 NgModule

    bootstrap: [AppComponent], entryComponents: [InputComponent]