AngularJS 指令在 <input> 最初加载到 DOM 时隐藏零

Posted

技术标签:

【中文标题】AngularJS 指令在 <input> 最初加载到 DOM 时隐藏零【英文标题】:AngularJS directives to hide zero when <input> is initially loaded to the DOM 【发布时间】:2015-10-27 16:50:10 【问题描述】:

我正在尝试实现一个角度指令,该指令将在&lt;input&gt; 在 DOM 上时立即隐藏零字段。基本上是这样的:

Hide Value in input when it's zero in angular Js

我的代码看起来像这样:

&lt;input hide-zero-onload ng-model="test"&gt;&lt;/input&gt;

.directive('hideZeroOnload', function() 
    return 
        link: function(scope, element) 
            element.on('input load', function() 
                console.log('loaded');
                if (this.value === '0') 
                    this.value = '-';
                
            );
        
    ;
);

但是,控制台日志永远不会被打印出来。我还尝试了“input onload”、“input init”、“input all”和“input”,结果都一样。我不知道第一次将&lt;input&gt; 添加到DOM 时会发出什么事件关键字?我怎样才能知道?

您可以查看代码http://plnkr.co/edit/TwraJlxZSd3TeSYscExq?p=preview

【问题讨论】:

留下test 未分配。您可以在您的 plunkr 中尝试,文本框将为空。 @Strelok 这不适用于我的应用程序。如果它不为零,我仍然希望能够在初始加载时显示测试数据 【参考方案1】:

为此请查看$formatters。它们旨在在模型更改或初始加载时格式化模型视图。 Plunkrhttp://plnkr.co/edit/SA9xz6eQmk3t7qfRack7?p=preview

您的指令将如下所示:

.directive('hideZero', [ function() 
    return 
      require: '?ngModel', // get a hold of NgModelController
      link: function(scope, element, attrs, ngModel) 

        // Specify how UI should be updated
        ngModel.$formatters.push(function(value) 
          if (value === 0) 
            // If the value is zero, return a blank string.
            return '';
          

          return value;
        );
      
    ;
  ]);

load 事件可能不会针对所有元素触发。 Jquery on() load event on a single element

【讨论】:

以上是关于AngularJS 指令在 <input> 最初加载到 DOM 时隐藏零的主要内容,如果未能解决你的问题,请参考以下文章

ionic angularJS input 相关指令 以及定时器 的使用

AngularJS ng-keydown 指令仅适用于 <input> 上下文?

AngularJS通过标签选择遵循指令的DOM元素

angularjs 自定义指令控制input只能输入数字和字母

监控 AngularJS 指令中输入元素上的 $valid

AngularJS ng-model 指令