2016-09-08 98 views
1

我創造了這個自定義過濾器,它應該採取有工作屬性對象的數組,並返回其具有關聯數組作業作爲名稱的數組共享作業NG-重複按預期不起作用:顯示任何值

angular.module('myApp') 
    .filter('groupBy', function(){ 
     return function(input){ 
      if (!input || !input.length) { return; } 
      var out = new Array(); 
      for (var crew of input){ 
       if(typeof out[crew.job] === 'undefined'){ 
        out[crew.job] = new Array(); 
       } 
       out[crew.job].push(crew.name); 
      }   
      console.log(out); 
      return out; 
     } 
    }); 

操作結果的console.log的:

Assistant Director: ["P.J. Voeten"] 

Director: ["George Miller"] 

Script Supervisor: ["Sophie Fabbri-Jackson"] 

Writer: ["Nick Lathouris", "George Miller", "Brendan McCarthy"] 

然後,我打算通過陣列進行迭代和打印像這樣:在

<li ng-repeat="(key, value) in cast.crew | groupBy"> 
    <span class="bold">{{key}}:</span> 
    <span ng-repeat="name in value">{{name}}</span> 
</li> 

的console.log過濾器函數顯示該數組是按照預期創建的,但它不會出現在視圖中,也不會顯示錯誤消息。

+1

如果您嘗試在視圖{{cast.crew | json}}輸出是什麼? –

+0

我得到了這個錯誤(視圖中沒有改變):錯誤:[ngRepeat:dupes]不允許在中繼器中重複。使用'track by'表達式來指定唯一鍵。 Repeater:(鍵,值)在cast.crew |中json,重複鍵:字符串:,重複值: http://errors.angularjs.org/1.5.0-beta.2/ngRepeat/dupes?p0(...) – mustieles

+1

將其添加到上方的新行中循環,就像 {{cast.crew | json}}

回答

0

由於@GabrieleCiech,我設法弄清楚了這個問題,在過濾函數中將out變量作爲數組實例化,然後試圖在視圖中作爲json對象訪問它。當我將var out = new Array();更改爲var out = new Object();時,它開始按照要求工作。