作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一系列表单(每个表单由一个组件管理)。
这些表单中有一种输入模式(例如,其中许多需要允许输入地址),我必须重构为可重用的组件,因为它们以多种形式使用,我不想重复既不是他们的逻辑也不是他们的模板。
每个可重用的组件都必须
<form>
标签address: {street: "...", "city": "...", ...}
)来自 this tutorial对于 Angular2,我了解如何实现目标 1、2 和 4。
本教程中的解决方案还可以实现其他目标,但它是通过从父级执行所有操作(参见 app.component.ts#initAddress
)来实现的。
如何在声明控件和他们对 child 的约束?
最佳答案
如果你想在子组件中提供所有内容,你可以尝试这样的事情。
import { Component, Input } from '@angular/core';
import { FormGroupDirective, ControlContainer, Validators, FormGroup, FormControl } from '@angular/forms';
@Component({
selector: 'address',
template: `
<div formGroupName="address">
<input formControlName="city" placeholder="city" (blur)="onTouched" />
<input formControlName="country" placeholder="country" (blur)="onTouched" />
<input formControlName="zipCode" placeholder="zipCode" (blur)="onTouched" />
</div>
`,
styles: [`h1 { font-family: Lato; }`],
viewProviders: [
{ provide: ControlContainer, useExisting: FormGroupDirective }
]
})
export class AddressComponent {
private form: FormGroup;
constructor(private parent: FormGroupDirective) { }
ngOnInit() {
this.form = this.parent.form;
const city = new FormControl('', Validators.required);
const country = new FormControl('', Validators.required);
const zipCode = new FormControl('', Validators.required);
const address = new FormGroup({ city, country, zipCode });
this.form.addControl('address', address);
}
}
用法:
import { Component } from '@angular/core';
import { FormGroup } from '@angular/forms';
@Component({
selector: 'my-app',
template: `
<form [formGroup]="form">
<address></address>
</form>
{{ form.value | json }}
`,
styleUrls: ['./app.component.css'],
})
export class AppComponent {
form: FormGroup;
constructor() {
this.form = new FormGroup({});
}
}
请注意,我正在使用 ReactiveFormsModule
。
另请务必查看 Angular Forms - Kara Erickson .该演示文稿向您展示了如何创建可重用的地址组件,同时实现了模板驱动和响应式(Reactive)表单。
关于angular - 如何允许嵌套组件被其父级跟踪并从 Angular 中的父级获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49747278/
我是一名优秀的程序员,十分优秀!