2014-10-06 98 views
0

我有一个窗体,要求两个字段中的至少一个有一个值才能生效。现在我已经构建了一个指令'keywordAndOrAuthor'来处理对此的验证。我设法让它能够正确地检查任何一个字段是否有值,如果是这样,则将验证设置为true。我不知道如何做的是将其他字段的验证设置为true。以下是该指令的当前代码:角度和/或自定义验证

angular.module('dashboard').directive 'keywordAndOrAuthor', -> 
require: "ngModel" 
link: (scope, elem, attrs, ctrl) -> 
    ctrl.$setValidity 'keywordAndOrAuthor', false 
    ctrl.$parsers.unshift (viewValue) -> 
     siblingElem = elem.siblings('.keyword, .author')[0] 
     if viewValue || siblingElem.value 
      ctrl.$setValidity 'keywordAndOrAuthor', true 
      viewValue 

如何将siblingElem的有效性设置为true?

** 编辑 **

下面是我想要一个可行的解决方案。

$scope.keywordOrAuthor = (topic_source) -> 
    if (topic_source.authors || topic_source.keywords) then false else true 

关键点意识到的是,NG-所需的工作原理类似于角纳克级或NG-禁用,如果在正被评估为真,条件是它仅增加所需的属性的元素。换句话说,在上面的例子中,如果authors参数或关键字参数有值,那么函数(在ng-require指令内使用)将返回false,并且不会返回验证错误。

回答

1

尝试设置NG-必须是“如果其他字段为空”

 <input type="text" ng-model="keyword" ng-required="author === undefined"> 
     <input type="text" ng-model="author" ng-required="keyword === undefined"> 

然后,我不知道你需要的任何指令。

+0

你不能在角度模板中使用===。此外,检查该字段是否具有“ng-required =”author“'和'ng-required =”关键字“''值会更简单。 – TheSharpieOne 2014-10-06 21:24:54

+0

等等,是否可以包含Ng-require =“author || keyword”来获得我想要的表单行为?如何将这种行为提取到指令中? – 2014-10-06 21:52:07

+0

我不知道在模板中不能做===,只是做==。我一直都在使用它,并且工作正常 – Scott 2014-10-07 00:30:38