【问题标题】:AngularJS ctrl.$isEmpty returns value instead of booleanAngularJS ctrl.$isEmpty 返回值而不是布尔值
【发布时间】:2017-10-18 15:36:33
【问题描述】:

为了调试 Angular 的 required 指令的问题,我自己复制了该功能:

.directive("myRequired", function(){
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, elm, attr, ctrl) {
      if (!ctrl) return;
      attr.myRequired = true; // force truthy in case we are on non input element

      ctrl.$validators.myRequired = function(modelValue, viewValue) {
        return !attr.myRequired || !ctrl.$isEmpty(viewValue);
      };

      attr.$observe('myRequired', function() {
        ctrl.$validate();
      });
    }
  };
})

我在 md-select 输入上使用此指令,并带有以下选项:

$scope.options = [
        { name: "option1", id: 1 },
        { name: "option2", id: 2 },
        { name: "option3", id: 3 }
    ];

当我的模型为我的选择预先填充了值时,如下所示:

$scope.myModel = {mySelect: 1};

然后myRequired 指令失败,因为ctrl.$isEmpty() 返回viewValue(即123)而不是true

为什么要这样做?

如何让它返回一个布尔值?

【问题讨论】:

  • 这很奇怪,因为$isEmpty always returns a boolean。你能发布一个plunker来重现这个问题吗?
  • 如果您的选择有一个预先填充的值,您期望什么行为?在我看来,验证应该成功,因为存在一个值。验证不成功吗?
  • 正确,验证失败

标签: javascript angularjs angular-material is-empty


【解决方案1】:

根据文档https://docs.angularjs.org/api/ng/type/ngModel.NgModelController#$isEmpty

$isEmpty 仅当值为 undefined、''、nullNaN 之一时才会返回 true

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2012-08-08
    相关资源
    最近更新 更多