Winkel -, ng-Nachrichten nicht zeigen, innen eckig-material-design-dialog (md-dialog)
Arbeite ich an einem Formular zum hinzufügen einer Kreditkarte in angularJS mit angular material (https://material.angularjs.org/latest/#/).
Für alle meine anderen Formulare, die ich verwendet, ng-Nachrichten (https://docs.angularjs.org/api/ngMessages/directive/ngMessages) zeigen Fehler bei der Validierung, und es funktionierte gut.
Wenn ich embded die form im inneren eine md-dialog, mein ng-Nachrichten werden nicht angezeigt, die Eingabe hinfällig geworden, aber kein Fehler angezeigt.
Ich habe das problem mit der grundlegenden überprüfung der Richtlinie und benutzerdefinierte Gültigkeitsprüfung-Richtlinie.
Meine Dialogfeld Vorlage :
<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>
Mein dialog definition :
$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
}
});
und meine benutzerdefinierte Richtlinie definition
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);
}
}
}
Und einen screenshot des Ergebnisses können Sie sehen, wo das ungültige Feld, aber keine Fehlermeldung :
- Jedes update auf dieser? wie du das Problem behoben?
- Nop nie fixed it, Projekt, ist lange vorbei
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei mögliche Updates hier detaillierte: https://github.com/angular/material/issues/8037
Stellen Sie sicher, dass die ng-app-Direktive wird auf das body-tag Ihrer Seite.
Entfernen Sie die Zeile
parent: angular.element(document.body)
von Ihrem $mdDialog.show () - Optionen.Einen Versuch mit
Fest, dass mein ähnliches Problem
md-input-container
, die nicht OP-Szenario. Ich glaube, das ist nicht die passende Antwort auf diese Frage, es würde besser passen, als Kommentar, weil es ist ein Schuss im Dunkeln (wenn man OP ' s situation), auch wenn es vielleicht für andere Szenarien.War ich in der Lage, diese Arbeit zu machen.
Und für eine benutzerdefinierte Richtlinie, ich habe diese
ist es möglich, dass du zwei
form
tags?wenn Sie kopiert die demos von Winkel-Website, die Sie haben können
form
innenform
. dies kann die Ursache für genau dieses problem.Jungs, ich war vor dem gleichen Problem. Das problem in meinem Fall war, dass ich noch nicht entfernt, einem umschließenden tag aus der Probe md-dialog-code. Das ist wohl war, sich mit den Nachrichten.
Hoffe, das hilft dir auch.
Abhimanyu
Ich denke, Sie fangen sollte Fehler ng-model
form.cc_number.$error
, gleichen code hier: