Adr*_*ajs 5 html javascript validation angularjs
我在AngularJS应用程序中创建了一个指令,该应用程序在我的应用程序中生成样式输入.它看起来像这样:
AC.directive('formInput',function ($compile) {
return {
transclude: true,
replace: true,
scope:{},
templateUrl: '/views/partials/form/input.html',
restrict: 'E',
link: function(scope, element, attrs){
scope.opts = attrs;
if(attrs.ngModel){
element.find('input').attr('ng-model', attrs.ngModel);
$compile(element.contents())(scope.$parent);
}
if(!attrs.type){
scope.opts.type = 'text';
}
}
};
}
)
Run Code Online (Sandbox Code Playgroud)
它的模板是:
<label class="acxm-textfield {{opts.cssclass}}">
<span ng-bind="opts.labeltext"></span>
<input type="{{opts.type}}" name="{{opts.inputname}}" value="{{opts.inputvalue}}" placeholder="{{opts.placeholder}}" ng-maxlength="{{opts.maxLength}}"/>
</label>
Run Code Online (Sandbox Code Playgroud)
电话很简单:
<form-input ng-model="UserProfile.FirstName" max-length="50" labeltext="{{'GENERAL.name' | translate}}" cssclass="acxm-p-horizontal" inputname="name" inputvalue="{{UserProfile.FirstName}}"></form-input>
Run Code Online (Sandbox Code Playgroud)
我想为这个字段创建验证,我添加了一个错误信息:
<span ng-show="showError(userInfoForm.name,'email')">
You must enter a valid email
</span>
Run Code Online (Sandbox Code Playgroud)
并且showError是:
$scope.showError = function(ngModelController, error) {
return ngModelController.$error[error];
};
Run Code Online (Sandbox Code Playgroud)
基本上,它是从"使用AngularJS掌握Web应用程序开发"一书中复制的.我有一个问题,因为当我记录我的表单时userInfoForm,在控制台中我得到的{{opts.inputname}}不是name属性,这里的值应该是"name".我究竟做错了什么?
dynamic-name在这里尝试我的指令:AngularJS动态表单字段验证
替换name="{{opts.inputname}}"为dynamic-name="opts.inputname"
我还简化了你的演示代码:
app.directive("dynamicName", function($compile) {
return {
restrict: "A",
terminal: true,
priority: 1000,
link: function(scope, element, attrs) {
var name = scope.$eval(attrs.dynamicName);
if (name) {
element.attr('name', name);
element.removeAttr("dynamic-name");
$compile(element)(scope);
}
}
};
});
app.directive('formInput', function($compile) {
return {
replace: true,
scope: {},
templateUrl: 'formInput.html',
restrict: 'E',
link: function(scope, element, attrs) {
scope.opts = attrs;
$compile(element.contents())(scope);
}
}
});
Run Code Online (Sandbox Code Playgroud)
表单输入模板:
<label class="acxm-textfield {{opts.cssclass}}">
<span ng-bind="opts.labeltext"></span>
<input type="{{opts.type}}" dynamic-name="opts.inputname" ng-model="opts.inputvalue"
placeholder="{{opts.placeholder}}"
ng-maxlength="{{opts.maxLength}}" required/> //use dynamic-name directive to bind dynamic names.
</label>
Run Code Online (Sandbox Code Playgroud)
DEMO(尝试清除文本以查看验证,我使用必要的验证进行快速演示,您可以将代码更改为电子邮件验证).关键是使用该dynamic-name指令.