2012-12-28 30 views
1

我正在使用一个指令来验证angularjs(版本1.0.2)中的两个表单字段(日期)。为了验证表单我使用下面的指令。
http://jsfiddle.net/cafau/Ja2ar/
我所做的唯一更改是将该指令重命名为ui-validate。 我在
http://jsfiddle.net/sidkurias/xXf6b/ 创建了一个小提琴我已经包含了我使用的部分html和控制器的相关部分。 控制器validStartDate和startBeforeEnd上有两个方法我想从指令中调用。当我这样做,我得到以下错误angularjs表单验证语法错误令牌意外'{'

Error: Syntax Error: Token '{' is unexpected, expecting [)] at column 13 of the expression [(function(){ 
var sdate = new Date($scope.avail.sdate), 
    today = new Date(getDefaultDates(0)); 
return sdate >= today ; 
}) && true] starting at [{ 
var sdate = new Date($scope.avail.sdate), 
    today = new Date(getDefaultDates(0)); 
return sdate >= today ; 
}) && true].at Error (<anonymous>) 
at throwError (http://g.dev/app/lib/angular/angular.js:5867:11) 
at consume (http://g.dev/app/lib/angular/angular.js:5905:7) 
at primary (http://g.dev/app/lib/angular/angular.js:6075:7) 
at unary (http://g.dev/app/lib/angular/angular.js:6066:14) 
at multiplicative (http://g.dev/app/lib/angular/angular.js:6049:16) 
at additive (http://g.dev/app/lib/angular/angular.js:6040:16) 
at relational (http://g.dev/app/lib/angular/angular.js:6031:16) 
at equality (http://g.dev/app/lib/angular/angular.js:6022:16) 
at logicalAND (http://g.dev/app/lib/angular/angular.js:6013:16) 
<form name="availForm" ui-validate="{startDate: validStartDate, sbe:startBeforeEnd}" class="ng-pristine ng-valid"> <br> 

到手表函数调用正确解析验证功能,但随后抛出上述语法错误。 为什么角度不喜欢函数定义的任何想法。 谢谢

+0

我没有看到你的第二小提琴的指令代码。你有小提琴显示问题吗?第二个小提琴也不包括AngularJS在任何地方。 –

+0

非常正确,第二个小提琴代表了我拉入的部分。这是一个单页的应用程序 - 至少,我尝试一个。我认为把整个设置放到提琴中会太多了。部分是基于被触发的路线激活的。我将添加相关部分,以便可以复制问题,或者我将创建一个更简单的版本,以便可以复制问题。谢谢 –

+0

最后想出了jsfiddle.if你现在运行小提琴,你可以看到异常 - 至少在chrome控制台中。 http://jsfiddle.net/sidkurias/xXf6b/谢谢 –

回答

3

看来你需要将引号(“”)将您的功能:

ui-validate="{startDate: 'validStartDate()', sbe:'startBeforeEnd()'}" 
+0

那当然做到了!作为JavaScript新手,我无法分辨为什么需要这样做。这是一种javascript偏心还是角度处理指令的方式? –

+0

这是该指令的实施方式。 – asgoth

+0

Upvote如果它帮助你请。 – asgoth