当前位置: 首页 > 面试题库 >

我可以以编程方式在自定义指令中应用Angular验证指令吗?

哈烨熠
2023-03-14
问题内容

我发现很多以下形式的html输入模式,这是电话号码:

<input type="text" ng-model="CellPhoneNumber" required ng-pattern="/^[0-9]+$/" ng-minlength="10" />

我想创建一个自定义指令,无论该指令适用于哪里,它都会告诉Angular应用所有这三个规则,例如:

<input type="text" ng-model="CellPhoneNumber" bk-ng-validation="phoneNumber"/>

然后,我指令中的代码将找到并调用一个名为的函数phoneNumber,在该函数中我将看到类似以下内容的内容:

清单1:

function bkNgPhoneNumber(model) {
    // This is purely SPECULATIVE pseudo-code, just to convey an idea.
    model.errors.add(applyMinLength(10, model));
    model.errors.add(applyMaxLength(15, model));
    model.errors.add(applyPattern("/^[0-9]+$/", model));
}

我宁愿使用上述方法而不是为这些规则重写代码,例如:

清单2:

function phoneNumber(model) {
    if (model.length < 10 || model.length > 15) {
        model.errors.add("Must be 10 to 15 chars!");
    }
}

我不想取消所有基于属性的指令,但最好创建一个“宏”指令,该指令将调用我的清单1代码,而后者将实际调用一组更多的“微”验证。


问题答案:

一种方法(即应用现有的验证器而无需再次编写其代码)将是添加验证指令的相应属性并强制重新编译。这将要求您的指令具有足够高的优先级,并且也必须为terminal: true

app.directive("bkNgValidation", function($compile){
  return {
    priority: 10000,
    terminal: true,
    link: function(scope, element){
      element.attr("ng-required", "true");
      element.attr("ng-minlength", 20);
      element.attr("ng-maxlength", 30);

      // prevent infinite loop
      element.removeAttr("bk-ng-validation");

      $compile(element)(scope);
    }
  };
});

演示版



 类似资料:
  • 问题内容: 因此,我基本上希望能够触发一个事件,然后进行伪指令编译并将其自身插入DOM中的某个位置。目前我有这样的事情 我可以看到具有所有所需内容的“ el”对象,但无法将其插入到DOM中……有什么线索吗? 问题答案: 您必须先创建dom元素,然后对其进行编译并将其添加到文档中。像这样: 我在这里创建了一个简单的示例:http : //plnkr.co/edit/n7SZpyeQ9nbjVSYA7

  • 问题内容: 此自定义验证指令是官方角度网站上提供的示例。 http://docs.angularjs.org/guide/forms会 检查文本输入是否为数字格式。 为了对该代码进行单元测试,我编写了以下代码: 然后我得到这个错误: 我到处都放置了print语句以查看发生了什么,而且该指令似乎从未被调用过。测试像这样的简单指令的正确方法是什么? 问题答案: 另一个答案的测试应写为: 请注意,now

  • 问题内容: 我是一个有角度的新手,我在角度的形式验证指令的工作方式上遇到了麻烦。 我知道我可以很容易地将指令添加到 各个字段 ,但是我正尝试添加一个验证,该验证将 比较两个表单字段 (两者都是模型的元素)。 这是一个表单框架: 简而言之,我想编写一条指令,并使用它来显示/隐藏if 和都有值but 。如何在一个指令中访问两个字段?指令是这项工作的正确工具吗? 问题答案: 剥皮猫的方法很多。 用法:

  • 创建自定义指令 第一步,创建一个自定义命令类文件,新建application/common/command/Hello.php <?php namespace app\common\command; use think\console\Command; use think\console\Input; use think\console\input\Argument; use think\con

  • 自定义指令可以使用 macro 指令来定义, 这是模板设计者所关心的内容。 Java程序员若不想在模板中实现定义指令,而是在Java语言中实现指令的定义, 这时可以使用 freemarker.template.TemplateDirectiveModel 类来扩展 (请参考 后续章节)。 基本内容 宏是有一个变量名的模板片段。可以在模板中使用宏作为自定义指令, 这样就能进行重复性的工作。例如,创建

  • 问题内容: 我决定编写一个自定义指令来帮助我验证输入框。这个想法是,我将新的fancy 指令添加到引导程序中,它将检查my is 或is 并根据需要应用or 类。 出于某种奇怪的原因,我的指令在正常情况下可以正常工作,但是在ui-bootstrap模态内部完全忽略了添加的指令。 模态和形式相同的代码 我可爱的指令 在插件上查看:http ://plnkr.co/edit/AjvNi5e6hmXcT