我是新手。我有一个称为文本编辑器组件的组件,这是我的html模板:
<div class="container">
<div id="testo" class="offset-1 text-center" >
<input type="text" class="col-8 text-center">
</div>
</div>
当我单击Enter键时,我想添加一个新的输入文本。这是我想要实现的目标:
<div id="testo" class="offset-1 text-center" >
<input type="text" class="col-8 text-center">
<!-- second input -->
<input type="text" class="col-8 text-center">
</div>
</div>
我需要为每个输入添加一个事件(开始时只有一个输入),并且使用模板驱动的表单
答案 0 :(得分:4)
您可以使用Reactive Forms FormArray来解决这个问题。您可以将(keyup)
或(keyup.enter)
处理程序附加到<input />
。在此keyup
事件的处理程序中,我们将新的FormControl
推送到FormArray
。本示例使用FormBuilder生成一个FormGroup,其中包含一个密钥为things
的{{3}}。我们使用FormArray
的{{3}}方法在处理程序中添加新的FormControl
/ AbstractControl
来进行键入。
组件:
import { Component } from '@angular/core';
import { FormBuilder, FormGroup, FormArray } from '@angular/forms';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular';
myForm: FormGroup;
constructor(private fb: FormBuilder) {
this.createForm();
}
onEnter() {
this.addThing();
}
get things() {
return this.myForm.get('things') as FormArray;
}
private createForm() {
this.myForm = this.fb.group({
things: this.fb.array([
// create an initial item
this.fb.control('')
])
});
}
private addThing() {
this.things.push(this.fb.control(''));
}
}
模板:
<form [formGroup]="myForm">
<div formArrayName="things">
<div *ngFor="let thing of things.controls; let i=index">
<label [for]="'input' + i">Thing {{i}}:</label>
<input type="text" [formControlName]="i" [name]="'input' + i" [id]="'input' + i" (keyup.enter)="" />
</div>
</div>
</form>
在最基本的级别上,您可以使用相应的FormArray
元素的FormArray属性和使用push属性的值来循环遍历表单数组中的每个数组:
<ul>
<li *ngFor="let thing of things.controls">{{thing.value}}</li>
</ul>
这里是controls的功能说明。
希望有帮助!
答案 1 :(得分:3)
控制器
声明一个数组“ inputs”并将其初始化为值1。
inputs = [1];
创建一个函数addInput()。
addInput() {
this.inputs.push(1);
}
HTML
<div id="testo" class="offset-1 text-center" *ngFor="let more of inputs">
<input type="text" class="col-8 text-center" (keyup.enter)="addInput()">
</div>
在您的模板中,每当您按回车键(keyup.enter)时,您都将调用addInput()函数。该函数将一个新值推入数组,该数组的长度增加1,从而创建一个新的输入字段。
答案 2 :(得分:3)
我看到很多人使用 keyup.enter 或 keydown.enter,但最合适的是 keypress.enter
<input type="text" [(ngModel)]="reference_num" class="form-control" placeholder="Type Reference number" name="reference_num" (keypress.enter)="search()">
答案 3 :(得分:2)
您可以在 angular 6、angular 7、angular 8 和 angular 9 应用程序中轻松使用 keydown 事件。
当用户在输入框字段上按键时,会触发角度组件的 onKeyDownEvent()。您可以使用 (keydown.enter) 属性来调用函数。波纹管逻辑代码:
.html
<input type="search" (keydown.enter)="onKeyDownEvent($event)" />
.ts
@Component({
selector: 'my-app',
templateUrl: './my.component.html',
styleUrls: ['./my.component.css']
})
export class MyComponent {
constructor(private router: Router,
private route: ActivatedRoute) { }
onKeyDownEvent(event: any) {
this.router.navigate(['search-result'], { relativeTo: this.route });
...logic
}
}
请注意,我们需要以编程方式导航到其他路由,在 .ts 文件中,而不是在带有 routerLink="/search-result" 的 html 文件中。我们需要注入 Router 和 ActivatedRoute 类,以便从当前路由导航到 /search-result 路由。