为了尝试使用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
(即1
,2
或3
)而不是{{ 1}}。
为什么这样做?
如何让它返回布尔值?
答案 0 :(得分:1)
根据文档https://docs.angularjs.org/api/ng/type/ngModel.NgModelController# $ isEmpty
$isEmpty
仅在true
,'',undefined
或null
的值之一时才会返回NaN