gpt4 book ai didi

用于修改输入主机文本和值的 Angular 2 属性指令

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

我需要一个属性指令,将输入格式化为 dd-mm-yyyy 并将其作为文本值,并根据 javascript 日期作为值。在 rc.3 中,我使用了 ngFormControl.valueAccessor.writeValue() 和其他一些方法。现在看来 NgFormControl 在发布版本中已经消失了。我现在应该用什么?这是我之前所做的:

<input type="text" format-date2 [ngFormControl]='formControls.dateOfMarriage'>

import {Directive, ElementRef} from '@angular/core';
import {NgFormControl} from '@angular/common';

@Directive({
selector: '[format-date2]',
host: {
'(input)': 'onInputChange()',
'placeholder': 'dd-mm-yyyy',
},
})
export class FormatDate2 {

viewValue;
modelValue;
currentValue = '';
el: HTMLInputElement;

constructor(private model: NgFormControl, private elementRef: ElementRef) {
this.el = elementRef.nativeElement;
}

ngOnInit() {
if (this.model.control.value) {
let d = new Date(this.model.control.value);
let s = this.pad(d.getDate()) + '-' + this.pad(d.getMonth() + 1) + '-' + d.getFullYear();
this.model.valueAccessor.writeValue(s);
}
}

pad(n) {
return n < 10 ? '0' + n : n;
}

onInputChange() {
let i = this.el.selectionEnd - this.el.value.length;
this.format(this.el.value);
i = this.viewValue.length + i;
this.model.control.updateValue(this.modelValue);
this.model.valueAccessor.writeValue(this.viewValue);
this.el.setSelectionRange(i, i);
return false;
}

format(val) {
// some code
// this.modelValue = 'some value';
// this.viewValue = 'another value'
}

}

最佳答案

  • 代替 NgFormControl 类使用 NgControl/@angular/forms
  • 使用 [formControl] 而不是 [ngFormControl] 指令。

你还需要确保你 @NgModule.imports: [ ReactiveFormsModule ] 到声明使用表单的组件的任何模块中。这是为了使用响应式(Reactive)表单,即 FormControl /FormGroup,但是模板表单,只需要使用FormsModule。你的例子看起来像是在使用 react 形式。但是您的指令也适用于模板表单。

关于用于修改输入主机文本和值的 Angular 2 属性指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40032343/

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