我正在使用表格在angularJS中添加信用卡,使用角度材料(https://material.angularjs.org/latest/#/) .
对于我的所有其他形式,我使用ng-messages(https://docs.angularjs.org/api/ngMessages/directive/ngMessages)来显示验证错误,并且它工作正常 .
当我在md对话框中嵌入表单时,我的ng-messages没有显示,输入变为无效,但没有显示错误 . 我遇到了基本验证指令和自定义验证指令的问题 .
我的对话框模板:
<md-dialog>
<md-dialog-content style="max-width:800px;max-height:810px; ">
<h2 i18n="add_card_button"></h2>
<form name="form">
<md-input-container>
<label i18n="card_number"></label>
<input name="card_number"
type="text"
ng-model="ctrl.newCard.cc_number"
class="md-input"
required
card-number>
<div ng-messages="form.card_number.$error">
<div ng-message="cardNumber">test message</div>
<div ng-message="required">test message 2</div>
</div>
</md-input-container>
...
</form>
</md-dialog-content>
<div class="md-actions" layout="row">
<md-button ng-click="">
<i18n>ok_button</i18n>
</md-button>
<md-button ng-click="cancel()" style="margin-right:20px;">
<i18n>cancel_button</i18n>
</md-button>
</div>
我的对话框定义:
$mdDialog.show({
controller : dialogController,
controllerAs : "ctrl",
bindToController : true,
templateUrl : "creditCards/assets/templates/add_credit_card_dialog.html",
parent : angular.element(document.body),
targetEvent : event,
clickOutsiteToClose : true,
locals : {
cardTypes : vm.cardTypes
}
});
和我的自定义指令定义
angular
.module('app.core')
.directive("cardNumber", cardNumber);
/* @ngInject */
function cardNumber () {
var directive = {
link: link,
restrict: 'A',
require : "ngModel"
};
return directive;
function link(scope, element, attrs, ngModel) {
ngModel.$validators.cardNumber = cardNumber;
scope.$watch("cardNumber", function(){
ngModel.$validate();
});
// Validate visa, mastercard, amex, concate new regex to validate more card
var reg = new RegExp(/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})$/);
function cardNumber(modelValue){
if(!modelValue){
return true;
}
modelValue = modelValue
.replace(/-/g, "")
.replace(/\s/g, "")
.replace(/,/g, "");
return reg.test(modelValue);
}
}
}
以及结果的屏幕截图,您可以在其中看到无效字段但没有错误消息:
6 回答
这里有两个可能的修复:https://github.com/angular/material/issues/8037
确保ng-app指令位于页面的body标签上 .
从$ mdDialog.show()选项中删除
parent: angular.element(document.body)
行 .尝试一下
这解决了我的类似问题
我能够做到这一点 .
将角度消息添加到凉亭和索引
将模块ngMessages添加到您的应用程序
在md-input-container上做了这个
对于自定义指令,我这样做了
你有两个
form
标签可能吗?如果您从Angular站点复制了演示,则可能
form
在form
内 . 这可能会导致这个问题 .伙计们,我面临同样的问题 . 我的问题是我没有从示例md对话框代码中删除封闭标记 . 这可能会干扰消息 .
希望对你也有帮助 .
Abhimanyu
我想,你应该捕到错误ng-model
form.cc_number.$error
,这里的代码相同: