【问题标题】:Directive that adds validation directive erasing data from textbox on $invalid添加验证指令从 $invalid 上的文本框中擦除数据的指令
【发布时间】:2015-04-13 18:18:22
【问题描述】:

This answer 让我最接近正确地实现这一点,但是一旦我的字段在表单上设置了$invalid 键(至少我认为是这样),它就会删除我文本框中的文本

here's my plnk

【问题讨论】:

  • 尝试编译整个表单 $compile(element.form)(scope) 而不是 $compile(element[0].form)(scope)
  • 谢谢...但它不起作用。在我的 plnker 链接中尝试一下“这里是我的 plnk”
  • 我已经添加了答案。检查它是否对您有用?

标签: javascript angularjs


【解决方案1】:

为了工作你的指令,你需要添加priority:1000,以便在任何指令被执行之前执行代码&在编译DOM之前你需要删除指令属性meta-validate,这样它就不会编译时执行。如果您不这样做,那么您将收到Maximum Call stack exceeds. 错误。

指令

 myApp.directive('metaValidate', function ($compile) {
    return {
      restrict: 'A',
      priority: 1000, //this setting is important to make sure it executes before other directives
      compile: function compile(element, attrs) {
        return {
          pre: function preLink(scope, iElement, iAttrs, controller) { if(!element.attr('ng-maxlength')){
              element.attr('ng-maxlength', '2');
              element.removeAttr("meta-validate");
            } },
          post: function postLink(scope, iElement, iAttrs, controller) {  
            $compile(element)(scope);
          }
        };
      }
    };
  });

Working Plunkr

希望这可以帮助你。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    相关资源
    最近更新 更多