2016-06-13 7 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> 

結果は、私は私のNG-オプションを記述するために多くの方法を試してみました。この

<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> 

ようにする必要があります。 実際には、それぞれのリスト内に正しいselectの数がありますが、それぞれの選択には異なる事前選択された変数が必要です。そしてそれらはすべて私のリストの最後の値で選ばれます。私が何を試しても問題ありません。

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の値をに変更しています。これは完全なオブジェクト事前選択値01です。。

$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-optionsの値を変更しました。 – Efx

関連する問題