gpt4 book ai didi

Angular 2 react 形式 - 从 formControlName 传递一个值

转载 作者:太空狗 更新时间:2023-10-29 17:57:19 25 4
gpt4 key购买 nike

使用 Angular 2,我有一个名为“example”的参数,它是一个 Date 对象。在模板中,我想用日期管道格式化“示例”。像这样:

<input type="text" [value]="example | date:'shortTime'">
// 9:00 AM

但是,我需要使用 Angular 的响应式表单。 FormControl 是先例,因此 formControlName 将覆盖 value 指令中的任何内容。

<input type="text" formControlName="example">
// Wed Mar 08 2017 09:00:00 GMT-0700 (MST)

<input type="text" formControlName="example" [value]="example | date:'shortTime'">
// Wed Mar 08 2017 09:00:00 GMT-0700 (MST)

formControlName 指令不接受管道。如何在响应式表单的模板中格式化 Date 对象?

伪代码:

@Component({
template: `
<form [formGroup]="formGroup">
Example: <input type="text" formControlName="example">
</form>
`
})

export class ExampleComponent implements OnInit {
public formGroup: FormGroup;
public example: Date = new Date();

public ngOnInit() {
this.formGroup = new FormGroup({
example: new FormControl(this.example)
});
}
}

最佳答案

更新:我意识到一种更简单、更明智的方法是使用 valueChanges 对更改事件值执行带有管道转换的 setValue。

如果您有许多带有订阅的表单控件,可能有一些关于清理订阅和提高效率的最佳实践。您还可以在处理/提交最终表单值时清除任何不需要的管道转换。

基本示例(另请参阅:original source):

ngOnInit() {
this.searchField = new FormControl();
this.searchField.valueChanges
.subscribe(val => {
this.searchField.setValue(myPipe.transform(val))
});
}

带有去抖延迟 + 清晰度检查的摘录(由 RxJS pipeable operators 提供):

this.searchField.valueChanges
.pipe( // RxJS pipe composing delay + distinctness filters
debounceTime(400),
distinctUntilChanged()
)
.subscribe(term => {
this.searchField.setValue(myPipe.transform(val))
});

原始建议...

This answer描述了如何为输入字段创建自定义控件值访问器,该访问器在 onChange(获取 convertTo* 自定义函数)和 writeValue(获取 convertFrom 自定义函数)方法中插入自定义时间戳转换函数。

您可能会创建类似的东西(例如,使模板等适应其他表单输入类型),但将转换函数替换为您想要的 Pipe 转换方法(可能是两种不同的类型)以实现您想要的。 Angular 文档或源代码可能有助于了解更多详细信息。

我认为这里建议的其他方法涉及在初始表单控件创建期间进行管道转换,这些方法更受限制并且可能不是您所期望的,因为它不会在用户更改输入值时继续应用这些更改.它一开始会正确显示,但任何操作都会丢失转换过滤,并且表单会简单地按原样提交,而不应用管道转换。

我可能遗漏了一些关于其他建议的工作原理或您所追求的具体内容的信息。

关于Angular 2 react 形式 - 从 formControlName 传递一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42677762/

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