Angular 6 numberonly 指令不起作用

Posted

技术标签:

【中文标题】Angular 6 numberonly 指令不起作用【英文标题】:Angular 6 numberonly directive not working 【发布时间】:2019-06-11 13:47:33 【问题描述】:

我从https://www.davebennett.tech/angular-4-input-numbers-directive/ 创建了一个指令,这样我就可以限制用户在电话号码中只输入数字。在src/app/app.sharerd.module.ts 文件中,我执行了以下代码来导入指令:

import  NumberOnlyDirective  from './number.directive';
declarations: [..., ..., NumberOnlyDirective], ...
export class SharedModule  

现在,在/src/ 文件夹下,我创建了名为modules/auth/component/ 的文件夹。

/src/auth/ 文件夹内的auth.module.ts 下,我做了以下操作:

import  NgModule  from '@angular/core';
import  SharedModule  from '../../app/app.shared.module';
...
...

现在,在signup.html 下的/src/auth/component/

<input type="text" name="phone" myNumberOnly ... > ...
...

我仍然可以在文本框中输入字符/特殊字符等,但是我在控制台/cli 中没有看到任何错误。

【问题讨论】:

尝试将您的 NumberOnlyDirective 也放入共享模块的导出中。 将此添加为您的答案。 【参考方案1】:

当您在共享模块中使用自定义指令/管道时,您还需要将其导出。

基本上在您的教程中,他创建了指令并在应用程序模块中声明了它。但是在您的示例中,您将指令放在共享模块中,因此您需要将指令放在声明括号中,但也要放在导出中。

shared.module.ts

@NgModule(
    /* ... */
    declarations: [YourDirective],
    exports: [YourDirective]
    /* ... */
)

【讨论】:

【参考方案2】:

三个快速指令调试技巧:

在指令的构造函数中添加debugger; 语句。然后您就可以确定它何时起作用并且您可以将其移除。 确保您拥有selector: '[magicFeature]' 而不是selector: 'magicFeature' 有时您需要重新启动 ng serve 以确保一切都已刷新。

【讨论】:

【参考方案3】:

试试这个:

import  Directive, ElementRef, HostListener, Input  from '@angular/core';
import  NgControl  from '@angular/forms';

@Directive(
  selector: 'input[type=number], input[numbersOnly]'
)
export class NumbersOnlyInputDirective 

  constructor(private elRef: ElementRef)  

  @HostListener('input', ['$event']) onInputChange(event) 
    const initalValue = this.elRef.nativeElement.value;
    this.elRef.nativeElement.value = initalValue.replace(/[^0-9]*/g, '');
    if ( initalValue !== this.elRef.nativeElement.value) 
      event.stopPropagation();
    
  


【讨论】:

以上是关于Angular 6 numberonly 指令不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Angular:使用指令禁用材质按钮不起作用

Angular Dropdown 指令不起作用

Angular2 可拖动指令,draggable="false" 不起作用

Angular scope.watch 在指令中不起作用

使用 ng-include 作为父节点时,使用 jquery 禁用所有子元素的 Angular 指令不起作用

Angular2嵌套路由父到子ES5不起作用