【发布时间】:2020-01-14 02:00:19
【问题描述】:
我正在尝试将每个字符串输入转换为空值。 所以我创建了一个指令来监听每个更改并将 null 分配给空字符串。
这里是 HTML
<form [formGroup]="form" class="mt-4 p-2" (ngSubmit)="onSubmit()">
<input nbInput fullWidth fieldSize="small" shape="semi-round" formControlName="AuthorityNum" EmptyToNull>
</form>
这是指令代码:
import { Directive, Input, HostListener, ElementRef } from
'@angular/core';
@Directive({
selector: '[EmptyToNull]'
})
export class NullValueDirective {
constructor() {
}
@HostListener('change', ['$event.target.value']) onKeyDowns(value) {
if (value === '') {
value = null;
console.log(value) // print: null
}
}
}
好像把值改成null了
但是当我提交表单并检查 form.value 时,它再次显示为空字符串。
为什么?
更新:
这是我的提交功能:
onSubmit() {
// TODO: Send to server
this.form.value.AuthorityNum === '' // true
}
这是 stackblitz 的代码:https://stackblitz.com/edit/angular-ilcg7y
【问题讨论】:
-
可以添加提交功能吗? value 是主机侦听器中的局部变量,因此更改内部的值不会改变外部的任何内容。
-
我认为您需要将指令返回的值绑定到相应的表单元素。
-
但看起来该值仍未设置为您的表单。你能为此创建一个堆栈闪电战吗?
-
你说得对。我更新了帖子。
-
我在帖子中添加了 stackblitz
标签: angular typescript events directive