不能在引号内使用角度值

时间:2013-12-11 20:40:57

标签: javascript angularjs

为什么这不起作用:

<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()例程永远不会被调用,但在底部示例中,它确实被调用。当我做一个&检查元素&#39;一切都很好。

3 个答案:

答案 0 :(得分: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控制的代码块中 - 因此你必须将其标记为绑定,否则它只是HTML内的文本。

答案 1 :(得分:2)

ng-click的值被解释为角度表达式,因此您不必使用“choice”周围的花括号。就这样写:

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

答案 2 :(得分:0)

这不起作用吗?

ng-click="mnuClick(choice)"

我肯定已经做了很多次这样的事情,但没有代码可以验证......