gpt4 book ai didi

angular - Angular 2 内部组件

转载 作者:太空狗 更新时间:2023-10-29 18:00:07 24 4
gpt4 key购买 nike

这是我的父表单:

<form [ngFormModel]="formModel">
<ui-form-control *ngFor="#key of controlsKeys"
[control]="formModel.controls[key]"
[name]="key">
</ui-form-control>
</form>

这是我的组件:

@Component({
selector: 'ui-form-control'
})
@View({
template: `
<label>{{name}}: </label>
<input [ngFormControl]="control" [placeholder]="name">
`,
directives: [FORM_DIRECTIVES]
})
export class UiFormControl{
@Input() control: UiControl;
@Input() name: string;

constructor(){
}
}

我可以在我的 ui-form-component 中看到 Control 值,但是当我更改它时,formModel-ComponentGroup 不会更新。所以看起来双向绑定(bind)在这里不起作用。

实际上,如果我删除我的 <ui-form-control>并放置简单的<input>标记而不是它将工作并且 formModel 将按预期更新。

最佳答案

我认为你应该在你的子组件中使用两种方式绑定(bind) @Input@Output。后者被通知父组件子组件内的控件发生变化。我想到了类似的事情:

@Component({
selector: 'ui-form-control'
template: `
<label>{{name}}: </label>
<input [ngFormControl]="control" (change)="inputChanged()" [placeholder]="name">
`,
directives: [FORM_DIRECTIVES]
})
export class UiFormControl{
@Input() control: UiControl;
@Output() controlChange: EventEmitter;
@Input() name: string;

constructor(){
this.controlChange = new EventEmitter();
}

inputChanged() {
this.controlChange.emit(this.control);
}
}

我通过利用 ng-content 为我的表单领域使用了一种中间方法。

@Component({
selector: 'field',
template: `
<div class="form-group form-group-sm" [ngClass]="{'has-error':control && !control.valid}">
<label for="for"
class="col-sm-3 control-label">{{label}}</label>

<div #content class="col-sm-8">
<ng-content ></ng-content>
<span *ngIf="control && !control.valid" class="help-block text-danger">
<span *ngIf="control?.errors?.required">The field is required</span>
</span>
</div>
</div>
`
})
export class FormFieldComponent {
@Input()
label: string;

@Input()
state: Control;
}

及其在父组件中的使用:

<form [ngFormModel]="companyForm">
<field label="Name" [state]="companyForm.controls.name">
<input [ngFormControl]="companyForm.controls.name"
[(ngModel)]="company.name"/> {{name.valid}}
</field>
</form>

这样输入、选择、文本区域仍然在父组件中管理,但字段组件处理字段格式(例如 Bootstrap3 的结构)并利用控件显示错误(如果有)。这样你就不再需要字段组件的双向绑定(bind),后者更通用;-)

希望对你有帮助,蒂埃里

关于angular - Angular 2 内部组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34763615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com