2016-03-29 6 views
0

Ich versuche, einen Stateful-Filter mit AngularJS zu erstellen, um schließlich einen Dienst aufzurufen, der Daten asynchron zurückgibt. Um dies zu testen, verwende ich einfach eine einfache $ Timeout-Funktion, die console.logs eine Zeichenfolge. Dieses console.log läuft jedoch einfach unendlich.

export default angular.module('components.filters.combine-name', []) 

.filter('combineName', ['$timeout', function ($timeout) { 
    function combineName(input) { 
    $timeout(function() { 
     console.log('test'); 
    }, 1000); 
    return input.firstName + ' ' + input.lastName; 
    } 

    combineName.$stateful = true; 
    return combineName; 
}]); 

html

<table class="table table-bordered table-striped table-responsive"> 
    <thead> 
    <tr> 
     <th> 
     <div class="th"> 
      Name 
     </div> 
     </th> 
     <th> 
     <div class="th"> 
      Status 
     </div> 
     </th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr ng-repeat="result in vm.results"> 
     <td>{{result | combineName}}</td> 
     <td>{{result.status}}</td> 
    </tr> 
    </tbody> 
</table> 

Controller:

this.results = [ 
    { 
    firstName: 'Johnny', 
    lastName: 'Utah', 
    status: 'Active' 
    }, 
    { 
    firstName: 'Richard', 
    lastName: 'Reynolds', 
    status: 'Inactive' 
    }, 
    { 
    firstName: 'Randy', 
    lastName: 'Johnson', 
    status: 'Active' 
    } 
]; 
+0

$ timeout triggert Digest, Filter lässt jedes Digest laufen ... das ist Endlosschleife –

Antwort

0

Mit $ timeout, Sie im Grunde auf dem Looping drehen und es wird weiter so tun, es sei denn, Sie sagen, es zu stoppen.

Innerhalb Ihrer Schleife verwenden Sie: $ timeout.cancel();