2015-12-14 66 views
1

我有一個問題,顯示一個預選值作爲選擇元素中的選定選項。這裏有雲代碼angularjs ng選項空白選項,而不是預選

<select ng-model="data.company" ng-options="company as company.name for company in companies"></select> 


$scope.companies =[{ 
    id:1, 
    name:"Company 1" 
}, 
{ 
    id:2, 
    name:"Company 2" 
}]; 

$scope.data = { 
    company:{ 
     id:2, 
     name:"Company 2" 
    } 
} 

的問題是,當我在一節進入選擇給了我一個空白選項爲默認insted的向我展示「連隊2」的。我即將做錯了什麼?

+1

嘗試'$ scope.data = $ scope.companies [1];' – Antiga

+0

這問題已經在SO上已經被無數次的回答了。 – ragerory

回答

1

在這種情況下,您需要使用track by,因爲您直接將對象值分配給ng-model。在這種情況下,發生的情況是,當您通過表達式直接綁定對象到data.company(ng模型)軌跡時,將檢查中的company.id與每個companies元素ID。如果有人得到匹配,則預先選擇該輸入。

標記

<select ng-model="data.company" 
    ng-options="company as company.name for company in companies track by company.id"> 
</select> 

Demo Plunkr

+1

哇,這個工程,你能解釋爲什麼沒有跟蹤它不工作? – lfelisiak

+0

@ user2600726查看我的編輯答案 –

+0

如果您將值設置爲公司對象爲$ scope.data = {company:$ scope.companies [1]},那麼您實際上不需要使用track by;看到我的回答更新到 – Scott

0

試試這個

<select ng-model="data.company" ng-options="company.name for company in companies"></select> 

    $scope.data = { 
     company: $scope.companies[1]; 
    }; 

要在下拉列表中顯示的值是公司名稱和存儲成爲該公司的對象。

+0

仍然不能正常工作,我會照常做 ''我無法弄清楚這樣(第一個)爲什麼不工作,因爲對象被正確存儲。 – lfelisiak

+0

是的,這也是工作,但te $ scope.data將被數據庫檢索,所以我不能覆蓋該內容。我也很感謝你的回答。也感謝你:) – lfelisiak

0

你可以嘗試使用NG-INIT

<select ng-init="data.company= companies[0]" 
     ng-model="data.company" 
     ng-options="company as company.name for company in companies"></select>