2017-07-14 65 views
1

我有一個數組與3個對象,然後1個對象(或更多取決於3個第一個對象的選擇),然後5個數組(或更多的根據5個數組的選擇)Angular 1 - 複雜的ng重複對象/數組

repeat="item in $ctrl.project[$ctrl.checkProject()].productType[$ctrl.ckeckProductType()] 

//method to search for the item 
     checkProject() { 
     if (this.project.label === 'business') { 
      return 0 
     } else if(this.project.label === 'realEstate') { 
      return 1 
     } else if (this.project.label === 'smallBusiness'){ 
      return 2 
     } 
     } 

而同爲ckeckProductType()方法

是不是有一個更復雜的解決方案,以激勵所有這一切?

+1

當然 - 在控制器中只運行一次**,而不是'return 0/1/2;'保存值:'this.project_label = this.checkProject();'和'this。 project_type = this.ckeckProductType();'然後在循環中使用這些屬性:$ ctrl.project [$ ctrl.project_label] .productType [$ ctrl.project_type] –

回答

0

最簡單的方法是將結果序列包裝到方法中。水木清華這樣的:

data-ng-repeat = "object in getMyObjects() track by $index" 

有了這個,你會選擇邏輯打動你的地方控制它應該是。但是,從性能方面來看這並不好。函數將被稱爲每個摘要,並會吃掉你的資源。

另一種方法是定義序列的依賴項(this.project.label等)並跟蹤它們的更新。當他們更新時,你會改變你的順序。這種方法需要更多代碼,維護起來有點難,但速度稍快(直到你的序列不包含1000+項)

所以這取決於你走什麼路。 希望這有助於。

P.S.有第三種方法。將所有合併成一個序列併爲此寫入過濾器。 P.P.S.最後一個是可能的,但不要這樣做,這是一個小晚上的笑話。