2016-06-13 45 views
1

我挖了幾個小時而沒有找到我想要做的答案。我的工作有很多變量的複雜形式,所以我會盡力在這裏縮小我的要求:)預選陣列中的選項

var list = [{id:0, name:opt0}, {id:1, name:opt1},{id:2, name:opt2}]; 
var selected = ['opt1', 'opt2']; 
var numberOfRows = 2; 

我有可變數量的選擇基於一個變量。所以我用NG-重複這樣的:

<tr ng-repeat="i in numberOfRows track by $index"> 
    <td> 
    <select list.indexOf(selected[$index]) as item for item in list></select> 
    </td> 
</tr> 

的結果應該是這樣的

<tr><td> 
    <select> 
    <option label="opt0" value="opt0"></option> 
    <option label="opt1" value="opt1" selected="selected"></option> 
    <option label="opt2" value="opt2"></option> 
    </select> 
</tr></td> 
    <tr><td> 
    <select> 
    <option label="opt0" value="opt0"></option> 
    <option label="opt1" value="opt1"></option> 
    <option label="opt2" value="opt2" selected="selected"></option> 
    </select> 
</tr></td> 

我試過很多方式來寫我的NG選項。 我實際上是正確的選擇與每個內部列表的數量,但每個選擇應該有一個不同的預選變量。他們都是根據我的名單的最後一個值選擇的。無論我嘗試什麼。

PS:在我的「選擇」數組中的值總是在列表[$指數] .NAME

如果有人知道如何實現,我會很高興的^^

... 。

小方面的請求:是否有可能在列表上做一個過濾器,它將通過所有選擇刪除/隱藏選定的選項? 結果是這樣的:

<tr><td> 
    <select> 
    <option label="opt0" value="opt0"></option> 
    <option label="opt1" value="opt1" selected="selected"></option> 
    //opt2 removed because it's selected in another select 
    </select> 
</tr></td> 
    <tr><td> 
    <select> 
    <option label="opt0" value="opt0"></option> 
    //opt1 removed because it's selected in the previous select 
    <option label="opt2" value="opt2" selected="selected"></option> 
    </select> 
</tr></td> 

謝謝:)

+0

可能是一個錯字,但您在第一個'selected'前缺少一個空格。 'value =「opt1」selected =「selected」' –

+0

只是在我的請求中輸入錯誤。我的變量名稱很長。 – Chim

回答

0

我想在第一部分現有的解決方案,但我不知道你是怎麼設法使這行代碼的工作:

<tr ng-repeat="i in numberOfRows track by $index"> 

所以我做了我自己的版本,只是基於你想要的輸出,使用$scope.selected作爲ng模型數組,因爲你可以看到我將你的$scope.selected變異爲[{id:1, name:'opt1'},{id:2, name:'opt2'}]這是完全對象預選值['opt1', 'opt2']

$scope.list = [{id:0, name:'opt0'}, {id:1, name:'opt1'},{id:2, name:'opt2'}]; 
$scope.selected = ['opt1', 'opt2']; 
$scope.selectModels = []; 
var newSelected = []; 
angular.forEach($scope.selected, function(value, key) { 
      this.push($filter("filter")($scope.list, {name: value})[0]); 
}, newSelected); 
$scope.selectModels = newSelected; 

你標記:

<tr ng-repeat="i in selected"> 
    <td> 
    <select ng-model="selectModels[$index]" ng-options="option.name for option in list track by option.id" class="form-control"></select> 
    {{ selectModels[$index] }} 
    </td> 
</tr> 

我認爲你身邊的問題是可能的,如果你產生於各行的不同list,或使用該行。

這裏是工作jsfiddle希望這可以幫助。您可以爲您的請求設置一個新問題。

+0

不錯,但是我們怎麼能在你的小提琴的任何選擇中選擇opt0? 我是否只需要使用$ scope?因爲我的控制器頭是這樣的 .controller('MyCtrl',function($ scope){ var vm = this; }); – Chim

+0

對不起,我做了一個快速修復,如果現在工作的小提琴,只需添加幾個變量,並更改ng選項的值。 – Efx