2013-12-11 21 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)" 

我肯定做沿着這些線路很多次的東西,但沒有代碼用手去驗證...