2016-09-20 9 views
0

Ich brauchte vor kurzem einige irgendwie angepasste Repeater, die Daten nach ihrem Schlüssel gruppieren, aber nicht einfach alle zusammen gruppieren, also las ich mehrere Referenzen und Dinge, ... und endlich komme ich zum Kopieren groupBy aus diesem Artikel, den er scheint es bestenfalls zu vervollständigen, ... http://sobrepere.com/blog/2014/10/14/creating-groupby-filter-angularjs/ Und dann angepasst i so ist es so geworden:Infdig in Benutzerdefinierte groupBy

die Dinge, die meine Gruppe von do ... ist:

Gruppendaten Zusammen, bis es Unterschiede erreicht. aber die Sache ist, dass, obwohl es funktioniert, es immer noch generieren infdig, ich weiß, es ist, weil die Digest getan anderen anrufen, aber was ich nicht weiß, ist, wie es auf sehr einfache und verständliche Weise zu lösen, wie ich neu bin JavaScript ...

 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

können Sie machen einen plunkr witn Code –

+0

Hallo diese uRL pls finden, seine perfekt funktioniert ... http://plinkr.co/edit/8jB4wSRtKfVmEsTGZtfV?p=preview – Ahalyaa

+0

in diesem was Sie genau tun müssen –

Antwort

0

In dieser uRL funktionierend ist ... 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]; 
      }; 
    }); 
Verwandte Themen