2017-11-02 9 views
0

以下、私は以下の選択リストを持っています。 ngSelectedは式の値を正しく選択しますが、selectのモデルはそれに応じて更新されません。 "High" Valueを選択できます。また、ngSelectedトリガーの場合は空の値が表示されますが、モデルは "High"のままです。ngSelectedはngModelを更新しません[AngularJS]

ngSelectedがトリガーされた後、プログラムでngModelを設定する方法は誰にも分かりますか? ngSelectedの式はdivのディレクティブから来ているので、ngChangeをその上に付けることはできません。

<select class="form-control" name="alertLevel-{{$index}}" ng-model="template.service.readings[$index].repeatBreachAlert.repetitiveAlertLevel" title="Please select an alert level"> 
     <option ng-selected="template.service.firstLevelMessage.below.messages | messagesLength.length === 0" value=""></option> 
     <option value="Valid">Valid</option> 
     <option value="High">High Alert</option> 
     <option value="Low">Low Alert</option> 
</select> 

答えて

0

これはangular official siteから取られます。

注:ngSelectedを選択してngModel ディレクティブと相互作用しない、それが唯一の要素で選択した属性を設定します。 がselectでngModelを使用している場合、ngModelは選択値と選択されたオプションを設定するので、 オプションではngSelectedを使用しないでください。

と言われています。 コントローラーでモデルを初期化し、ng-selectedディレクティブを削除する必要があります。

このような何かが働くだろう:

この回答を解決ビューでモデルを設定し、これを使用し
function initializeModel() { 
    for (let i; i < whatEverMyIterationLooksFor; i++) { // I suppose you are using ng-repeat in template so here you should iterate through the relevant scope. 
    const shouldBeEmpty = template.service.firstLevelMessage.below.messages || messagesLength.length === 0; // You also had a typo here with the OR operator. 

    if (shouldBeEmpty) { 
     template.service.readings[i].repeatBreachAlert.repetitiveAlertLevel = null; 
    }; 
    } 
} 
+0

これは、初期化またはたびに、この関数が呼び出された上で動作します。タイプミスではなく、カスタムフィルタ –

+0

ngSelectedについての情報をありがとうございます。 –

+0

また、 'ng-init'を使ってモデルを初期化することもできますが、それはあまり良いことではありません。 – Korte

0

<span class="ng-hide"> 
    {{((template.service.firstLevelMessage.above.messages | messagesLength).length === 0 && template.service.readings[$index].repeatBreachAlert.repetitiveAlertLevel !== 'Valid' ? template.service.readings[$index].repeatBreachAlert.repetitiveAlertLevel = '' : '' }} 
</span> 
関連する問題