【发布时间】:2015-07-05 10:08:15
【问题描述】:
我的表单中有几个文本字段和一个电子邮件字段。 我想验证所有字段以进行必需/强制验证。我想验证电子邮件字段以进行电子邮件格式验证。我只想在单击两个按钮并在页面顶部显示验证消息时执行验证。我知道我可以在字段中检查电子邮件和所需的验证,并使用 ng-show 和我可以显示消息的标志。但是我想检查指令中每个字段的值,然后将标志设置为 true,这将使消息出现。
这是我的 HTML。这被加载了为什么主页中的状态提供程序还定义了以下模板和它的控制器。所以它只是一个视图部分:
<form name="myForm">
<div ng-show="validationFailed">
<!-- here i want to display validation messages using cca.validationMsgs object -->
</div>
<input type="text" name="test" ng-model="cca.field1" require />
....
<input type="email" mg-model="cca.field2" />
<input type="button" name="mybutton" />
</form>
现在控制器定义在另一个 JS 文件中:
'use strict';
(function(){
angular.module('store', []);
app.controller("StoreController",function(){
var cca = this;
cca.validationMsgs = {};
cca.validationFailed = false; //this flag should decide whether validation messages should be displayed on html page or not.when its true they are shown.
...//other mapped fields
});
这里是未完成的指令,我想定义和编写我的逻辑。逻辑将是这样的: 1)迭代所有需要设置的元素并检查它们 $validators 对象 / $error.required 对象已设置 2)如果是,则将validationFailed标志设置为true,将验证消息添加到validationMsgs对象并中断循环。 3) 检查电子邮件类型字段是否设置了 $error.email 对象,如果是 同样将validationFailed标志设置为true并将相应的消息添加到对象。不确定我是否真的需要一个指令。我想在元素内应用指令。
app.directive("requireOnSubmit",function(){
var directiveDefinitionObject = {
restrict:'E',
//.... need to fill in
//I can use link funcion but not sure how to map
// validationMsgs and validationFailed objects in here.
};
return directiveDefinitionObject;
});
【问题讨论】:
-
现在 travelling.so 无法添加代码。但我会解释我的想法是什么。我想迭代表单中的所有元素,如果其中没有值,我想设置一个标志。如果至少一个元素没有值,则此标志将为真。我还将在 ng-show 中使用此标志来显示消息。所以这里有两个问题,如何在模板和指令中绑定标志?这个逻辑应该在点击按钮时执行,以便在哪里附加事件监听器
-
我添加了一个使用工厂而不是指令的解决方案。看看吧。
-
@Chrillewoodz 我添加了一些代码。我试图解释我想使用指令做什么以及我想在指令中映射的控制器中的字段。我知道你的方式不同。但不确定哪个更好。
-
指令仅用于 DOM 操作。它不应包含任何有关验证或其他任何内容的逻辑。这在服务或工厂内会更好。我的示例非常详尽地解释了所有内容,您应该能够更改某些变量和名称以使其正常工作。我已经为你的工作奠定了良好的基础,现在由你决定。
-
@Chrillewoodz 好的,让我看看这是否有效,谢谢。如果可行,我会接受它
标签: angularjs validation directive