2015-09-19 39 views
0

此代碼的工作AngularJS下拉列表奎德里

<select ng-model="connectionsDropDown" ng-options="campaign as campaign.title 
    for campaign in campaigns" ng-change="OnConnectionCampaignChanged(connectionsDropDown)"> 
</select> 

新選擇的值傳遞給OnConnectionCampaignChanged

但是,在下拉列表的開頭處有一個空白條目。

一些谷歌搜索告訴我,我可以通過添加

track by connectionsDropDown 

然而,當我嘗試

<select ng-model="connectionsDropDown" ng-options="campaign as campaign.title 
    for campaign in campaigns" ng-change="OnConnectionCampaignChanged(connectionsDropDown) 
    track by connectionsDropDown"> 
</select> 

OnConnectionCampaignChanged接收的電流值,而不是新選擇一個將其刪除。

我該如何協調這兩者?

我想:
- 下拉列表中沒有空白項
- 切換到視圖
時,能夠預設選擇的值 - 在選擇的值傳遞給OnConnectionCampaignChanged當他使用選擇另一個條目

+0

我同意@JBNizet提供的答案,但我會更進一步,問你爲什麼要在ng-change事件中添加'track by'子句,而不是'ng-options'? – Claies

回答

2

我不知道你在哪裏得到了這個技巧,但它確實看起來像一個討厭的解決方法,而不是正確的解決方案。

要理解爲什麼存在一個空白選項,你必須把自己放在棱角分明的鞋子裏。比方說,你的選擇是

<select ng-model="selectedFruit" ng-options="fruit for fruit in fruits"> 

這意味着:顯示所有fruits在選擇框中的選項,並選擇其中一個是===selectedFruit

現在如果selectedFruit爲空,未定義或只是沒有任何結果會發生什麼? Angular選擇什麼選項?它不能選擇任何水果,所以它添加一個空白選項並選擇一個。

推論:如果你不想要一個空白選項,你必須確保選中的水果總是顯示的水果之一。

對於您的情況,請確保$scope.connectionsDropDown引用了$scope.campaigns中的一個對象。

+0

謝謝(+1)。這回答了我的第一點。那另外兩個呢? – Mawg

+1

第二點是回答:您需要確保控制器用$ scope.campaigns中的某個對象填充$ scope.connectionsDropDown。第三點也應該很好。 –

+1

工作plunkr:http://plnkr.co/edit/jXotx562RAZE3G8jhjOd?p=preview –