【问题标题】:Custom Validators in Angularjs - $validators is not showing in link functionAngularjs 中的自定义验证器 - $validators 未显示在链接功能中
【发布时间】:2017-11-25 16:01:26
【问题描述】:

我正在尝试创建自定义验证器,但我发现 ctrl.$validators 未定义。以下是我的代码:

   link: function (scope, element, attrs, ctrl) {               
        ctrl.$validators.emptyCheckboxList = function (modelValue, viewValue) {
            if (!modelValue || modelValue.length === 0) {
                ctrl.$setValidity("emptyCheckboxList", false);
            }
            else {
                ctrl.$setValidity("emptyCheckboxList", true);
            }
        }
    }

另外,有没有办法覆盖所需的验证器?在 AngularJS 的文档中,他们提到要覆盖 $isEmpty,但它对我不起作用。

谢谢

【问题讨论】:

  • 避免同时提出多个不同的问题。使用ng-required directive 控制元素上的required 属性。
  • 你想在这里完成什么?为什么要覆盖$isEmpty 函数?也许给我们一个你打算如何使用这个指令的例子?
  • georgeawg,我正在尝试实现一个复选框列表并添加一个必需的选项。问题是我们在我们的 convension sc-model 中使用而不是 ng-model。有什么解决办法吗?
  • 既然你已经接受了这个问题的答案,你应该打开一个新问题。
  • 我创建了另一个问题:stackoverflow.com/questions/47498179/…

标签: javascript angularjs validation angularjs-directive


【解决方案1】:

$validators 属性在ngModelController 中可用(ng-model 指令的控制器)。您似乎缺少在指令定义对象中要求 ngModel

require: 'ngModel', //<-- this must be present here
link: function (scope, element, attrs, ctrl) {               
    ctrl.$validators.emptyCheckboxList = function (modelValue, viewValue) {
        if (!modelValue || modelValue.length === 0) {
            ctrl.$setValidity("emptyCheckboxList", false);
        }
        else {
            ctrl.$setValidity("emptyCheckboxList", true);
        }
    }
}

当您在指令 DDO 中添加 require: 'ngModel' 时。它在link函数的第4个参数中使用require指令控制器(本例ngModelController)。

【讨论】:

  • 是否可以使用自定义模型。示例:scModel?
  • @TheEagle 这个$validators 只能在ngModel 上使用,你可以使用customModel,我想你需要多个指令,我不关心
  • 你到底想用现有的必需验证器做什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 2016-12-31
相关资源
最近更新 更多