根据角度6中的输入文本字段值创建x个子组件

时间:2019-03-28 21:21:31

标签: angular

我希望能够根据在Angular 6中输入文本字段中输入的内容创建x个子组件。例如,如果我输入5,则将创建5个子组件。

这是我的父组件:

<input type="text" class="form-control" [(ngModel)]="circlecount">
<div id="rectangle">
   <app-circle *ngFor="let circle of circleArray; let i = index" 
      [index]="i"></app-circle>
</div>

这是我的孩子部分:

export class CircleComponent {
  circleArray;
  @Input() index: number;
  @Input() circlecount: number;

  ngOnChanges(){
    this.circleArray = Array(this.circlecount).fill(0).map((x,i)=>i);
  }  

}

我在输入字段中输入数字,但没有任何反应。

3 个答案:

答案 0 :(得分:0)

您不能使用ngModel绑定到另一个组件中的属性。将计数绑定到父组件内部的属性,然后通过@Input

将其传递给子组件

答案 1 :(得分:0)

这是我整理起来的东西,可以使它按照您的描述进行工作。

shape.component.ts (父级)

import { Component } from '@angular/core';

@Component({
selector: 'app-shape',
    template: `<input type="text" class="form-control"
        [(ngModel)]="circleCount" (keyup)="changes()">
        <div id="rectangle">
        <app-circle *ngFor="let circle of circleArray; let i = index"
            [index]="i"></app-circle>
        </div>`,
    styles: ['']
})
export class ShapeComponent {
    circleCount = 0;
    circleArray = [];
    changes() {
        this.circleArray = new Array(+this.circleCount)
            .fill(0).map((x, i) => i);
    }
}

circle.component.ts (子级)

import { Component, Input } from '@angular/core';

@Component({
    selector: 'app-circle',
    template: `<div>Circle {{index}}</div>`,
    styles: ['']
})
export class CircleComponent {
    @Input() index: number;
    constructor() { }
}

答案 2 :(得分:0)

问题很简单。数据绑定属性更改时,将调用生命周期挂钩OnChanges。对于与ngModel的绑定,请使用(ngModelChange)=“ onChange($ event)”。

标记:

<input type="number" [ngModel]="circlecount" (ngModelChange)="onChange($event)">

onModelChange事件:

onChange(circlecount: number): void {
  this.circlecount = circlecount;
  this.circleArray = new Array(this.circlecount).fill(0).map((x,i)=>i);
}