2016-04-26 14 views
0

VorlageAngular Vorlage nicht aktualisiert nach Umfang

<ul> 
    <li ng-repeat="object in objects">{{object.id}}</li> 
</ul> 

-Controller

function Controller($scope, ObjectFilter) { 
    $scope.objects = [{id: 1}, {id: 2}, {id: 3}]; 
    var ids = [1, 3]; 
    $scope.objects = ObjectFilter($scope.objects, ids); 
} 

Filter

function ObjectFilter(objects, ids) { 
    var out = []; 
    for(i=0; i<ids.length; i++) { 
     for(j=0; j<objects.length; j++) { 
      if(objects[j].id === ids[i]) { 
       out.push(objects[j]); 
      } 
     } 
    } 
    return out; 
} 

$ scope.objects gefiltert wird gefiltert, aber die Vorlage wird nicht aktualisiert.
Wenn ich versuche $scope.$apply() bekomme ich einen Fehler, dass $ apply ist bereits in Bearbeitung.

Sollte das nicht nur funktionieren? Warum nicht?!

EDIT: Also dieses vereinfachte Beispiel scheint zu arbeiten, aber nicht meine eigentliche Code!

EDIT: Ich habe es durch die Kombination von zwei Controllern zu arbeiten. Danke für die Eingabe, half mir herauszufinden, wo das Problem nicht war!

+0

Funktioniert perfekt für mich! Ändern Sie einfach "OjectFilter" in "ObjectFilter" – Revive

+0

Fixed the typo. Dies ist eine vereinfachte Version meines Codes. Vielleicht ist es ein Problem mit Eltern/Kind Bereichen. – barro32

Antwort

2

Fiddle: https://jsfiddle.net/9gb3s7yk/

Sie haben vergessen, Ihre Schleife Variablen zu deklarieren: var i, var j

for(var i = 0; i < idCollection.length; i++) { 
    for(var j = 0; j < objs.length; j++) { 
     if(objs[j].id === idCollection[i]) { 
      out.push(objs[j]); 
    } 
    } 
} 
+0

Die Geige arbeitet immer noch ohne die Deklaration der Zählervariablen. –

+0

Keine Ahnung, warum OPs dann nicht funktioniert. ¯ \ _ (ツ) _/¯ Filterfunktion außerhalb des Bereichs, vielleicht? – Kyle

2

Versuchen Sie, Ihre $ Umfang nur diejenigen wie folgt zu definieren:

function Controller($scope, ObjectFilter) { 
    //Private variable inside controller: 
    var objects = [{id: 1}, {id: 2}, {id: 3}]; 
    var ids = [1, 3]; 

    //Define Viewscope: 
    $scope.objects = ObjectFilter(objects, ids); 
} 
1

perfekt funktioniert! Ändern Sie einfach "OjectFilter" zu "ObjectFilter"

Verwandte Themen