2017-08-29 74 views
0

我的HTML頁面上有一個列表。該列表使用ng-options從數組中抽取。對象數組的屬性之一是show。 ng-options使用一個過濾器來只顯示show == 1的選項。當用戶點擊一個按鈕時,列表中的選擇項被添加到一個數組,並且show值需要被設置爲0,以便它從名單。該值被設置爲0,但ng選項現在正確地打印選項的選項。更新值時更改爲字符串數組

數組定義

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在單擊select時出現以下錯誤:'Can not set property'show'of undefined' – quirimmo

+0

@KRISHNAPATEL你需要以這種方式改變你的代碼,否則有一次'filter'返回一個空數組,並且你有錯誤,因爲'click'被觸發兩次。 'addReferenceType(){ let filteredTypes:Array = this.referenceTypes.filter(option => option.label == this.referenceType);如果(filteredTypes.length> 0){ filteredTypes [0] .show = 0; } }' – quirimmo

回答

0

你需要改變這樣的代碼,否則一次過濾器返回一個空數組,你有一個錯誤,因爲點擊被觸發兩次。

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

對不起,這是我的錯誤。我發佈的代碼工作正常。當另一個數組長度大於0並且我寫的代碼被隱藏時,顯示了第二個div。他們從用戶界面的角度看起來是一樣的,所以我甚至沒有注意到。 @quirimmo你的小提琴有一些問題,但提供的解決方案基本上是一回事。無論如何,我會給你一些信用! – ddelella