2016-09-20 11 views
0

최근에 몇 가지 사용자 지정 리피터가 필요합니다. 키로 데이터를 그룹화했지만 간단히 그룹으로 묶어서는 안되기 때문에 몇 가지 참조 및 사항을 읽었습니다 ... 그리고 마지막으로 복사하려면 그는 기껏를 완료하는 것이 문서에서 GROUPBY, ... http://sobrepere.com/blog/2014/10/14/creating-groupby-filter-angularjs/ 그리고는 다음과 같이 될 수 있도록 내가 정의 :Infdig in Custom groupBy

일 내 그룹입니다 ... 않는 기준 :

그룹 데이터 차이가있을 때까지 함께. 하지만 문제는 작동하지만 여전히 infdig를 생성합니다. 왜냐하면 다이제스트가 다른 하나를 호출했기 때문입니다.하지만 내가 모르는 것은 매우 쉽고 이해하기 쉬운 방식으로 해결하는 방법입니다. 자바 스크립트로 ...이 URL에

 app.filter('groupBy', function() { 
      var results = {}; 
      return function (data, key) { //Data => My Objects Array - Key => Name Of Filtered Property 
       if (!(data && key)) return; 
       var result; 
       if (!this.$id) { 
        result = {}; 
       } else { 
        var scopeId = this.$id; 
        if (!results[scopeId]) { 
         results[scopeId] = {}; 
         this.$on("$destroy", function() { 
          delete results[scopeId]; 
         }); 
        } 
        result = results[scopeId]; 
       } 

       for (var groupKey in result) 
        result[groupKey].splice(0, result[groupKey].length); 

       var grpKey = -1; //GroupKey 
       var lastUserId; 
       for (var i = 0; i < data.length; i++) { 
        if (!result[grpKey] || lastUserId && lastUserId != data[i][key]) // Ex.: result[data[0]["UserId"]]{ => return UserId 
         result[++ grpKey] = []; 

        result[grpKey].push(data[i]); 
        lastUserId = data[i][key]; 
       } 

       var keys = Object.keys(result); 
       for (var k = 0; k < keys.length; k++) { 
        if (result[keys[k]].length === 0) 
         delete result[keys[k]]; 
       } 
       return result; 
     }; 
      }); 
+0

당신은 안녕 pls는 URL을, 그것의 완벽하게 작동을 찾아내는 plunkr witn의 코드 –

+0

을 만들 수 있습니다 ... 완벽하게 작동한다 ... http://plnkr.co/edit/8jB4wSRtKfVmEsTGZtfV?p=preview – Ahalyaa

+0

정확히 무엇을해야합니까? –

답변

0

http://plnkr.co/edit/8jB4wSRtKfVmEsTGZtfV?p=preview

  app.filter('groupBy', function ($timeout) { 
      return function (data, key) { 
    if (!key) return data; 
    var outputPropertyName = '__groupBy__' + key; 
    if(!data[outputPropertyName]){ 
     var result = {}; 
     for (var i=0;i<data.length;i++) { 
      if (!result[data[i][key]]) 
       result[data[i][key]]=[]; 
      result[data[i][key]].push(data[i]); 
     } 
     Object.defineProperty(result, 'length', {enumerable: false, value: Object.keys(result).length}); 
     Object.defineProperty(data, outputPropertyName, {enumerable:false, configurable:true, writable: false, value:result}); 
     $timeout(function(){delete data[outputPropertyName];},0,false); 
     } 
    return data[outputPropertyName]; 
      }; 
    });