Javascript AngularJS ctrl.$isEmpty返回值而不是布尔值
为了调试angular所需指令的问题,我自己复制了功能: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
.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有一个预填充的值,您希望出现什么行为?在我看来,验证应该成功,因为存在价值。验证是否未成功?正确,验证失败