Angular FormGroup:如何将FormControlname移动到NG-Template外部FormGroupName?

发布于 2025-02-09 06:54:37 字数 1973 浏览 1 评论 0原文

此代码正在工作:

<form id="list" [formGroup]="Form">
  <ion-list lines="none" class="list">
    <ion-item-sliding formArrayName="things" *ngFor="let item of formArray.controls; index as index"> 
        <ion-item [formGroupName]="index">

          <ng-container [ngTemplateOutlet]="thingText" [ngTemplateOutletContext]="{item:item, index:index}"></ng-container>

          <ng-template #thingText let-item="item" let-index="index">
            <ion-textarea id="thing-text" formControlName="content" auto-grow 
              value="{{ item.value.content }}" 
              (click)="activateEditing(index)"
              (ionBlur)="leaveTheField(index)" 
              (keypress)="detectChange(index)"
              (ionFocus)="changeScroll(index)" #activeThings>
            </ion-textarea>
          </ng-template>

        </ion-item>
    </ion-item-sliding>
  </ion-list>
</form>

但是我想将ng-template移出表格之外。但是,当我这样做时,我会得到错误:必须与父formgroup指令一起使用formControlname。

然后,我试图将FormGroup传递到NG-Template:

<ng-container [ngTemplateOutlet]="thoughtText" [ngTemplateOutletContext]="{formGroup: Form, item:item, index:index}"></ng-container>

(...)

<ng-template #thoughtText let-item="item" let-index="index" let-formGroup="formGroup">
  <div [formGroup] = "formGroup">
    <ion-textarea id="thing-text" formControlName="content" auto-grow
                  value="{{ item.value.content }}"
                  (click)="activateEditing(index)"
                  (ionBlur)="leaveTheField(index)"
                  (keypress)="detectChange(index)"
                  (ionFocus)="changeScroll(index)" class="active-text form-control" #activeThing>
    </ion-textarea>
  </div>
</ng-template>

但它不起作用。我得到了“ eRROR:找不到名称的控制:'content'“

我该怎么做才能将ng-template移出表单之外?

This code is working:

<form id="list" [formGroup]="Form">
  <ion-list lines="none" class="list">
    <ion-item-sliding formArrayName="things" *ngFor="let item of formArray.controls; index as index"> 
        <ion-item [formGroupName]="index">

          <ng-container [ngTemplateOutlet]="thingText" [ngTemplateOutletContext]="{item:item, index:index}"></ng-container>

          <ng-template #thingText let-item="item" let-index="index">
            <ion-textarea id="thing-text" formControlName="content" auto-grow 
              value="{{ item.value.content }}" 
              (click)="activateEditing(index)"
              (ionBlur)="leaveTheField(index)" 
              (keypress)="detectChange(index)"
              (ionFocus)="changeScroll(index)" #activeThings>
            </ion-textarea>
          </ng-template>

        </ion-item>
    </ion-item-sliding>
  </ion-list>
</form>

But I want to move the ng-template outside the form. However, when I do, I get an Error: formControlName must be used with a parent formGroup directive..

Then I tried to pass the formGroup to the ng-template:

<ng-container [ngTemplateOutlet]="thoughtText" [ngTemplateOutletContext]="{formGroup: Form, item:item, index:index}"></ng-container>

(...)

<ng-template #thoughtText let-item="item" let-index="index" let-formGroup="formGroup">
  <div [formGroup] = "formGroup">
    <ion-textarea id="thing-text" formControlName="content" auto-grow
                  value="{{ item.value.content }}"
                  (click)="activateEditing(index)"
                  (ionBlur)="leaveTheField(index)"
                  (keypress)="detectChange(index)"
                  (ionFocus)="changeScroll(index)" class="active-text form-control" #activeThing>
    </ion-textarea>
  </div>
</ng-template>

But it didn't work. I get the ´Error: Cannot find control with name: 'content'`

What do I have to do to move the ng-template outside the form?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月亮坠入山谷 2025-02-16 06:54:37

一种方法是将form controlname传递到ng-template并使用[formControl]。见下文。

<ng-container [ngTemplateOutlet]="thoughtText" 
              [ngTemplateOutletContext]="{formGroup: Form, item:item, index:index, formControlName: 'content'}"></ng-container>

(...)

<ng-template #thoughtText let-item="item" let-index="index" let-formGroup="formGroup" let-formControlName="formControlName">
  <div [formGroup] = "formGroup">
    <ion-textarea id="thing-text" [formControl]="formGroup.get(formControlName)" auto-grow
                  value="{{ item.value.content }}"
                  (click)="activateEditing(index)"
                  (ionBlur)="leaveTheField(index)"
                  (keypress)="detectChange(index)"
                  (ionFocus)="changeScroll(index)" class="active-text form-control" #activeThing>
    </ion-textarea>
  </div>
</ng-template>

One way is to pass formControlName to ng-template and use [formControl]. See below.

<ng-container [ngTemplateOutlet]="thoughtText" 
              [ngTemplateOutletContext]="{formGroup: Form, item:item, index:index, formControlName: 'content'}"></ng-container>

(...)

<ng-template #thoughtText let-item="item" let-index="index" let-formGroup="formGroup" let-formControlName="formControlName">
  <div [formGroup] = "formGroup">
    <ion-textarea id="thing-text" [formControl]="formGroup.get(formControlName)" auto-grow
                  value="{{ item.value.content }}"
                  (click)="activateEditing(index)"
                  (ionBlur)="leaveTheField(index)"
                  (keypress)="detectChange(index)"
                  (ionFocus)="changeScroll(index)" class="active-text form-control" #activeThing>
    </ion-textarea>
  </div>
</ng-template>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文