【发布时间】: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(即1、2 或3)而不是true。
为什么要这样做?
如何让它返回一个布尔值?
【问题讨论】:
-
这很奇怪,因为
$isEmptyalways returns a boolean。你能发布一个plunker来重现这个问题吗? -
如果您的选择有一个预先填充的值,您期望什么行为?在我看来,验证应该成功,因为存在一个值。验证不成功吗?
-
正确,验证失败
标签: javascript angularjs angular-material is-empty