AngularJS ctrl。$ isEmpty返回值而不是布尔值

时间:2017-10-18 15:36:33

标签: javascript angularjs angular-material is-empty

为了尝试使用angular的必需指令调试问题,我自己重复了这个功能:

.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 }
    ];

当我的模型有一个预先填充的select值时,如下所示:

$scope.myModel = {mySelect: 1};

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

为什么这样做?

如何让它返回布尔值?

1 个答案:

答案 0 :(得分:1)

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

$isEmpty仅在true,'',undefinednull NaN