2013-12-11 23 views
6

内的角度值为什么这个不行:不能使用引号

<ul class="dropdown-menu"> 
    <li ng-repeat="choice in dropDownItems"> 
    <a class="btn" ng-click="mnuClick('{{choice}}')">{{choice}}</a> 
    </li> 
</ul> 

但这并工作:

<ul class="dropdown-menu"> 
    <li ng-repeat="choice in dropDownItems"> 
    <a class="btn" ng-click="mnuClick('xxx')">{{choice}}</a> 
    </li> 
</ul> 

在上面例子中,mnuClick()程序不会被调用,但在底部的例子,它的确如此。当我做'检查元素'时,一切看起来都很好。

+0

内的表达式,你不需要双花括号。 http://stackoverflow.com/questions/17878560/difference-between-double-and-single-curly-brace-in-angular-js。它的SPEC –

回答

7

它不起作用,因为你这样做的意思是说你想提供字符串{{choice}}mnuClick函数。

当提供xxx时,这实际上是正确的,因此您需要在这里引用。

但在使用时{{choice}},你不想THAT字符串,但你想要的表达进行评估,并将其结果(这可能是一个字符串)作为参数 - 因此你不需要引号(甚至没有花括号)在这里。

所以只写

<a class="btn" ng-click="mnuClick(choice)">{{choice}}</a> 

和你的罚款:-)。

简而言之:在一种情况下,你处理的是一个表达式,它解析为一个字符串,而另一种情况下,你直接处理一个字符串。因此有一次你不需要引号,而另一次你需要引号。

如果你想在何时使用大括号,当没有,不妨从this answer对这个问题的详细信息:Difference between double and single curly brace in angular JS?

希望这有助于。

PS:你a标签的文本里面,你需要双大括号,因为你在AngularJS控制的代码块在这里不是 - 因此你必须标记它作为约束,否则” d只是HTML中的文本。

2

ng-click的值被解释为一个角度表达式,因此您不必在“choice”附近使用大括号。只要这样写:

<a class="btn" ng-click="mnuClick(choice)">{{choice}}</a> 
0

这不工作?

ng-click="mnuClick(choice)" 

我肯定做沿着这些线路很多次的东西,但没有代码用手去验证...