2016-03-23 12 views
1

Ich habe eine einzelne Seite App mit dem MEAN-Stack gebaut. Ich versuche eine Liste von Elementen zu erhalten, die aktualisiert werden sollen, nachdem ein neues Element in eckig hinzugefügt wurde, aber es funktioniert nicht.

Das funktioniert gut und gibt mein Array der Speicher zurück, die ich in der Ansicht anzeigen.

Ich habe dann ein Feld ein neues Array hinzuzufügen ... um den Code zu vereinfachen es wie folgt aussieht:

// create a new storage object from $scope.newStorage 
var storage = new Storages($scope.newStorage); 

ich verschiedene Dinge auf die Daten und schließlich ...

storage.$save(function(){ 

    $scope.storages.push(storage); // doesn't seem to do anything 
    console.log("new storage", storage); //shows up fine 
    $scope.newStorage = []; // clear textbox 
    $scope.showHide.addItemPanel = false; // hides the newStorage form 
    return $scope.storages; 
}); 
dann tun

Es scheint wie $scope.storages.push(storage) tut nichts.

Wenn ich diesen Code am Ende:

$scope.storages = Storages.query(); 
return $scope.storages; 

Dann funktioniert es. Aber ich möchte nicht jedes Mal alle Daten vom Server abrufen müssen. Wie kann ich das lösen und warum funktioniert das nicht?

Wenn ich console.log(JSON.stringify($scope.storages)) es wie folgt aussieht:

[{"_id":"XXXXXXXXXXXXXXX","_title":"XXXXXXXXX","__v":0,"files":[],"comments":[],"fields":[{"0":{"Title":"XXXXXXXXXXXXX"},"1":{"Category":"coding"},"2":{"Details":"XXXXXXXXX 

Vielen Dank im Voraus! Lesen

+0

Können Sie bestätigen, dass $ scope.storages ein Array? Was zeigt auch, wenn Sie versuchen, 'console.log (JSON.stringify ($ scope.storages))' '? –

+0

Was ist "Speicher"? Ist das Ihre eigene Klasse oder ist das etwas aus einer Mongo/Angular-Client-Bibliothek, die Sie verwenden? – zakdances

+0

@ionelPOP Wenn ich 'console.log ($ scope.storages)' 'es sagt, es ist ein' Array [Object, Object, etc.] '... Ich habe ein Snippet der JSON.stringify Ausgabe oben hinzugefügt. –

Antwort

0

die Kommentare unterhalb

storage.$save(function(){ 

    //storage is promise here, not a Storage object you expect 
    $scope.storages.push(storage); 

    //because console.log binds to reference 
    //so after promise resolves, value on reference is changed 
    console.log("new storage", storage); //shows up fine 

    //not required at all 
    return $scope.storages; 
}); 

Einfache Lösung

//bind this to $scope 
var storage = new Storages($scope.newStorage); 

//like this 
$scope.storage = new Storages($scope.newStorage); 
//so Resource.$save is promise, when it completes, it will trigger digest 
//and your array will be populated 
$scope.storage.$save(); 
$scope.newStorage = []; 
$scope.showHide.addItemPanel = false; 
$scope.storages.push($scope.storage); 

Bessere Lösung

//$save accepts callback 
storage.$save(function(newStorageFromServer){ 

    //newStorageFromServer is not promise, but actual result from server 
    //which is Storage instance by default 
    $scope.storages.push(newStorageFromServer); 

    //other staff 
    $scope.newStorage = []; // clear textbox 
    $scope.showHide.addItemPanel = false; // hides the newStorage form 

    //return statement is useless 
}); 
+0

:(kein Glück, ich habe Angst. Es erscheint immer noch nicht, bis ich die Abfrage erneut ausführen. –

+0

OK. So hat es alles jetzt klar geworden, denke ich .. Das zurückgegebene Objekt hat ein Feld, das von Mungo auf der Serverseite bevölkert ist, die nicht auf dem zurückgegebenen Versprechen erscheint ... deshalb wird es nicht angezeigt ... jetzt müssen Sie herausfinden wie man das macht ... irgendwelche Gedanken? –