是否可以计算 Angular6 中多个输入字段中的字符
Is it possible to count characters across multiple input fields in Angular6
我正在将包含 FormControl 的 FormGroup 动态添加到 FormArray,并将 UI 中的表单控件显示为输入字段。我想计算在 UI 中添加的每个 FormGroup 的 sectionContent 字段中键入的字符数。这完全有可能只使用一个 FormGroup,因为我可以订阅 valueChanges 方法,将值的长度传递给变量,然后在 UI 中插入变量。但是有可能使用多个动态添加的 FormGroups 和它们的 FormControls 吗?问题是每个 FormGroup 都需要一个新变量注入到 html 代码中,我不确定这是否可行。也许还有另一种方法可以计算 UI?
中多个字段的字符数
HTML:
<div class="container">
<div formArrayName="section" *ngFor="let section of myForm.get('section').controls; let i = index">
<div [formGroupName]="i">
<div class="row">
<div class="col-sm-8">
<div class="form-group">
<textarea class="form-control" [id]="'sectionContent' + i" placeholder="Main Content" formControlName="sectionContent"></textarea>
</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-4">
<button type="button" class="btn btn-primary"
(click)="addSectionButtonClick()">Add Section</button>
</div>
</div>
</div>
组件:
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators, FormArray } from '@angular/forms';
@Component({
selector: 'app-create-section',
templateUrl: './create-section.component.html',
styleUrls: ['./create-section.component.css']
})
export class CreateSectionComponent implements OnInit {
myForm: FormGroup;
constructor(private fb: FormBuilder) { }
ngOnInit() {
this.myForm = this.fb.group({
title: ['', Validators.required],
section: this.fb.array([
this.addSectionFormGroup()
])
});
}
addSectionButtonClick(): void {
(this.myForm.get('section') as FormArray).push(this.addSectionFormGroup());
}
addSectionFormGroup(): FormGroup {
return this.fb.group({
sectionContent: ['', Validators.required]
})
}
您还可以创建管道。管道它只是一个接收参数和 return 值的函数。一个简单的计数管道可以是
@Pipe({name: 'countPipe'})
export class CountPipe implements PipeTransform {
transform(value: string): string {
return value?value.length+' characters, '+value.split(' ').length+' words'
:'0 characters, 0 words';
}
}
你可以使用
{{section.get('sectionContent').value |countPipe}}
注意:不要忘记将管道作为“声明”包含在您的模块中
@NgModule({
imports: [ BrowserModule, FormsModule ],
declarations: [ AppComponent, CountPipe ], //<--HERE
bootstrap: [ AppComponent ]
})
export class AppModule { }
我正在将包含 FormControl 的 FormGroup 动态添加到 FormArray,并将 UI 中的表单控件显示为输入字段。我想计算在 UI 中添加的每个 FormGroup 的 sectionContent 字段中键入的字符数。这完全有可能只使用一个 FormGroup,因为我可以订阅 valueChanges 方法,将值的长度传递给变量,然后在 UI 中插入变量。但是有可能使用多个动态添加的 FormGroups 和它们的 FormControls 吗?问题是每个 FormGroup 都需要一个新变量注入到 html 代码中,我不确定这是否可行。也许还有另一种方法可以计算 UI?
中多个字段的字符数HTML:
<div class="container">
<div formArrayName="section" *ngFor="let section of myForm.get('section').controls; let i = index">
<div [formGroupName]="i">
<div class="row">
<div class="col-sm-8">
<div class="form-group">
<textarea class="form-control" [id]="'sectionContent' + i" placeholder="Main Content" formControlName="sectionContent"></textarea>
</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-4">
<button type="button" class="btn btn-primary"
(click)="addSectionButtonClick()">Add Section</button>
</div>
</div>
</div>
组件:
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators, FormArray } from '@angular/forms';
@Component({
selector: 'app-create-section',
templateUrl: './create-section.component.html',
styleUrls: ['./create-section.component.css']
})
export class CreateSectionComponent implements OnInit {
myForm: FormGroup;
constructor(private fb: FormBuilder) { }
ngOnInit() {
this.myForm = this.fb.group({
title: ['', Validators.required],
section: this.fb.array([
this.addSectionFormGroup()
])
});
}
addSectionButtonClick(): void {
(this.myForm.get('section') as FormArray).push(this.addSectionFormGroup());
}
addSectionFormGroup(): FormGroup {
return this.fb.group({
sectionContent: ['', Validators.required]
})
}
您还可以创建管道。管道它只是一个接收参数和 return 值的函数。一个简单的计数管道可以是
@Pipe({name: 'countPipe'})
export class CountPipe implements PipeTransform {
transform(value: string): string {
return value?value.length+' characters, '+value.split(' ').length+' words'
:'0 characters, 0 words';
}
}
你可以使用
{{section.get('sectionContent').value |countPipe}}
注意:不要忘记将管道作为“声明”包含在您的模块中
@NgModule({
imports: [ BrowserModule, FormsModule ],
declarations: [ AppComponent, CountPipe ], //<--HERE
bootstrap: [ AppComponent ]
})
export class AppModule { }