2016-07-30 30 views
0

Also habe ich den folgenden Code, bekam ...Angular 1.5 Gültigkeitsbereich Variable Arbeits nicht aus PouchDB Antwortfunktion

testApp.controller(...) { 

    $scope.results = []; 
    $scope.hasData = true; 

    $scope.results.push({ 
     "name": "test" 
    }); // WORKS 

    db.get('table_people').then(function(response) { 
     console.log('success'); 

     $scope.results.push({ 
      "name": "test" 
     }); 
    }); // this DOESN'T WORK even though the "success" message is printed... 

}); 

Und wie Sie können aus den Kommentaren sagen, die erste push zu den Array funktioniert, aber Letzteres nicht. Die oberste Zeile kann in der Angular-Vorlage unter Verwendung von {{ results }} ausgedruckt werden, aber die letzte gibt ein leeres Array zurück.

Edit: Eine Lösung unter Verwendung $timeout als gefunden wurde Zyklus verdaut nicht ausgeführt wurde, sondern Art fühlt sich wie eine zusammengehackt Lösung.

Edit: Lösung ...

db.get('table_people').then(function (response) { 
    console.log('success'); 
    $timeout(function() { 
     $scope.results = response.data; 
    }); 
}); 

Der Code Lösung ist etwas anders, als ich nicht mehr die Testdaten müssen nicht mehr aufgrund der Code Funktion und kann die Antwortdaten direkt anwenden.

+0

Was passiert, wenn Sie console.log ($ scope) von innerhalb der verschachtelten Funktion? Vielleicht ist $ scope tatsächlich außerhalb des Geltungsbereichs - kein Wortspiel beabsichtigt. –

+0

Veröffentlichen Sie die Lösung auch. Vielleicht kann es aufgeräumt werden. –

+0

Oder vielleicht nur einen Digest-Zyklus erzwingen. –

Antwort

1

Sie vermissen eine $digest Zyklus Tick. Doing $scope.$digest() nachdem Sie die Daten in $scope.results geschoben haben, sollte das Problem beheben. Die Verwendung von $timeout ist in dieser Situation ein bisschen Overkill (und zusätzlicher Service zum injizieren).

+0

Ah, eine noch bessere Lösung! Ich danke Ihnen lieber Herr :) –