Угловой ngTemplateOutlet внутри ngFor

#angular #typescript

Вопрос:

Я использую шаблон для передачи некоторых данных, а затем отображаю их внутри ngFor. Все работает нормально, кроме FormControl. Когда я обновляю значение для строки, оно обновляется во всех строках.

Вот эта картинка:

введите описание изображения здесь

Каждый тест представляет собой строку.

Вот несколько кодов:

тест.директива.ts

 import { Directive, TemplateRef } from '@angular/core';  @Directive({  selector: '[appTest]' }) export class TestDirective {   constructor(public template: TemplateReflt;anygt;) { }  }  

строка.компонент.ts

 import {AfterViewInit, Component, OnInit, QueryList, TemplateRef, ViewChildren} from '@angular/core'; import { AppComponent } from '../app.component'; import {TestDirective} from "../test.directive"; import {FormControl} from "@angular/forms";  @Component({  selector: 'app-row',  templateUrl: './row.component.html',  styleUrls: ['./row.component.scss'] }) export class RowComponent implements OnInit, AfterViewInit{  @ViewChildren(TestDirective)  public children: QueryListlt;TestDirectivegt;;  private component: AppComponent;   public ctrl: FormControl = new FormControl();   constructor(component: AppComponent) {  this.component = component;  }   ngOnInit(): void {  }   ngAfterViewInit(): void {  this.component.register(this.children.toArray()[0].template);  } }  

row.component.html

 lt;div *appTestgt;  {{ ctrl.value }}   lt;input [formControl]="ctrl"gt; lt;/divgt;  

app.component.ts

 import {Component, ViewChildren, QueryList, AfterViewInit, TemplateRef} from '@angular/core'; import { TestDirective } from './test.directive';  @Component({  selector: 'app-root',  templateUrl: './app.component.html',  styleUrls: ['./app.component.scss'] }) export class AppComponent {  title = 'test';   public templates: TemplateReflt;anygt;[] = [];   public data: number [] = [1, 2, 3, 4];   public register(template: TemplateReflt;anygt;) {  console.log(template)  this.templates.push(template);  } }  

app.component.html

 lt;app-rowgt;lt;/app-rowgt;  lt;div *ngFor="let data of data"gt;  lt;ng-container *ngFor="let template of templates" [ngTemplateOutlet]="template"gt;lt;/ng-containergt; lt;/divgt;