【发布时间】:2023-03-24 17:29:01
【问题描述】:
如何对数据值使用指令?
<div class="col-12 data" appPhoneNumber>
{{data.phoneNumber}}
</div>
appPhoneNumber 是我的指令,而 data.phoneNumber 是我想要使用它的值。我尝试过这种方式,但出现错误:
Error: StaticInjectorError(AppModule)[PhoneNumberDirective -> NgControl]:
StaticInjectorError(Platform: core)[PhoneNumberDirective -> NgControl]:
NullInjectorError: No provider for NgControl!
我有点不知所措,我对指令没有太多经验
编辑以包含指令代码:
@Directive({
selector: '[appPhoneNumber]'
})
export class PhoneNumberDirective {
constructor(public ngControl: NgControl) { }
@Input('appPhoneNumber') appPhoneNumber;
@HostListener('ngModelChange', ['$event'])
onModelChange(event) {
this.onInputChange(event);
}
onInputChange(event){
let newVal = event.replace(/\D/g, '');
if(newVal.length === 0){
newVal = '';
} else if(newVal.length<=3){
newVal = newVal;
} else if(newVal.length<=6){
newVal = newVal.replace(/^(\d{0,3})(\d{0,3})/, '$1.$2');
} else if(newVal.length<=10){
newVal = newVal.replace(/^(\d{0,3})(\d{0,3})(\d{0,4})/, '$1.$2.$3');
} else {
newVal = newVal.substring(0, 10);
newVal = newVal.replace(/^(\d{0,3})(\d{0,3})(\d{0,4})/, '$1.$2.$3');
}
this.ngControl.valueAccessor.writeValue(newVal);
}
}
【问题讨论】:
-
这个指令应该做什么?它的代码在哪里?
-
您应该使用
@Directive注释并指定具有相同名称的@Input。@Directive({ selector: '[appPhoneNumber]' })然后@Input('appPhoneNumber') appPhoneNumber;在指令的类声明中。 -
@hilnius 我尝试使用 Input,但它仍然给我同样的错误
-
@bryan60 已更新。它只是应该为电话号码添加点。像这样:xxx.xxx.xxxx
-
在输入中还是仅作为显示值?