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

Javascript AngularJS ctrl.$isEmpty返回值而不是布尔值,javascript,angularjs,angular-material,is-empty,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

为了调试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 }
    ];
当“我的模型”为“我的选择”预先填充了值时,如下所示:

$scope.myModel={mySelect:1}

然后myRequired指令失败,因为ctrl.$isEmpty返回viewValue,即1、2或3,而不是true

为什么要这样做

如何让它返回布尔值?

根据文档$isEmpty


仅当值为未定义、null或NaN时,$isEmpty才会返回true

这很奇怪,因为$isEmpty。您可以发布一个Plunk来重现问题吗?如果您的select有一个预填充的值,您希望出现什么行为?在我看来,验证应该成功,因为存在价值。验证是否未成功?正确,验证失败