2017-08-29 18 views
0

私のHTMLページにリストがあります。このリストは、ng-optionsを使用して配列から取得します。オブジェクト配列のプロパティの1つはshowです。 ng-optionsはフィルタを使用して、show == 1のオプションのみを表示します。ユーザーがボタンを押すと、リスト内の選択項目が配列に追加され、show値を0に設定する必要があります。リスト。値は0に設定されていますが、ng-optionsはselectのオプションを間違って表示しています。配列の値を更新するときに文字列に変更

アレイ定義は

referenceTypes: Array<any> = [ 
      { label: 'Customer Reference', show: 1 }, 
      { label: 'PO Number', show: 1 }, 
      { label: 'SO Number', show: 1 } 
     ] 

ボタンをクリックし

addReferenceType =() => { 
      ... 

      // hide the reference type from the add drop down list 
      this.referenceTypes.filter(option => option.label == this.referenceType)[0].show = 0; 
     } 

HTML

<select ng-model='$ctrl.referenceType' 
     ng-options="option.label as option.label for option in $ctrl.referenceTypes | filter: {show: 1}"> 
    <option value=""></option> 
</select> 



Before



After

+0

こんにちは、あなたのコードを試してみましたが、正しく動作しているようです。 問題を再現できるように実際の例を作成できますか。以下のリンクを確認してください [jsfiddleで試したサンプル](https://jsfiddle.net/25z9ck4n/2) –

+0

@KRISHNAPATELあなたが作成したjsfiddleには、選択をクリックすると次のエラーが表示されます。 undefined' – quirimmo

+0

@KRISHNAPATELこのようにコードを変更する必要があります。そうでない場合、 'filter'が空の配列を返し、' click'が2回トリガされるため、そのエラーが発生します。 'addReferenceType(){ let filteredTypes:Array = this.referenceTypes.filter(オプション=> option.label == this.referenceType); if(filteredTypes.length> 0){ filteredTypes [0] .show = 0; } } – quirimmo

答えて

0

した後、あなたは、このようにコードを変更する必要があり、そうでなければ1時間はフィルタが空の配列を返し、クリックので、あなたは、そのエラーを持っています2回トリガされます。

addReferenceType() { 
    let filteredTypes: Array<any> = 
    this.referenceTypes.filter(option => option.label == this.referenceType); 
    if (filteredTypes.length > 0) { 
     filteredTypes[0].show = 0; 
    } 
} 
+0

申し訳ありませんが、これは私の間違いでした。投稿したコードは正常に動作します。別の配列の長さが0より大きく、私が書いたコードが隠されているときに表示されていた2番目のdivがありました。私は気づいていないので、UIの観点から見ても同じです。 @quirimmoあなたのフィドルにいくつかの問題がありましたが、提供される解決策は本質的に同じことです。私はとにかくあなたにいくつかのクレジットを差し上げます! – ddelella

関連する問題