1

Ich habe ein Modell, das ich verwende, um eine Tabellenstruktur in meiner Ansicht zu iterieren und zu erstellen. Ich habe einen Knopf auf den ich den letzten Wert von DB bekommen und dem Modell zuweisen muss. Dann bekomme ich das innerHTML des Modells und erstelle ein PDF meiner aktuellen Ansicht.Warten, bis Daten dem Modell in angularjs zugewiesen werden

Ich bin mit einem Problem konfrontiert, dass, bevor die Daten vollständig zu Modell und View zugeordnet ist, die nächste Anweisung aktualisiert wird, um die InnerHTML von Container div ausgeführt wird, und ich bekomme den älteren Snapshot meiner Ansicht. Wie kann ich die Ausführung meiner Anweisung beibehalten, bis das Modell mit Zuweisung abgeschlossen ist und die Ansicht aktualisiert wurde?

Alle Vorschläge sollen sehr geschätzt werden.

Antwort

1

Sie sollten Ihren Code in $timeout einpacken. Dadurch wird sichergestellt, dass der Code im nächsten Zyklus ausgeführt wird und Sie den neuesten Snapshot erhalten.

$timeout(function(){ 
    <your code to get innerHtml> 
}) 

Es gibt keine Notwendigkeit, einen Timeout-Wert, da dies zu erwähnen, wird aufgerufen, sobald Ansicht

PS verändert hat: In $timeout als Abhängigkeit.

+0

Ich bin sicher nicht, wie viel Zeit Lücke würde dafür ausreichend sein. Trotzdem danke. –

+0

brauchen Sie dafür keine Zeit zu geben. Diese Zeitüberschreitung wird ausgeführt, nachdem die Ansicht aktualisiert wurde. –

+0

danke ashfaq, aber soweit ich weiß, leere $ Timeout macht den Job für uns, es wird Digest-Zyklus auslösen, aber es garantiert nicht, wenn die Datenzuordnung zum Modell abgeschlossen ist. –

0

ich die ng-Show von Winkel verwenden würde und Ihre Inhalte nur angezeigt werden, wenn die Daten in die Steuerung geladen wird:

HTML: 
<div ng-app="myApp" ng-controller="myCtrl" data-ng-init="getValues()"> 
<div ng-show="dataLoaded"> 
    <input type="number" ng-repeat="(key, value) in randomArray track by $index" ng-model="randomArray[key]"> 

</div> 
</div> 


CONTROLLER: 
.controller('myCtrl', function($scope) { 

    $scope.getValues = function() { 

    $scope.randomArray = ['myKey', 'anotherKey', 'thirdKey', 'key4'];  
    angular.forEach($scope.randomArray, function(value, key){ 
     $scope.randomArray[key] = 0; 
    }); 

    // Set dataLoaded to true 
    $scope.dataLoaded = true; 
    } 

}); 

CODEPEN: http://codepen.io/giannidk/pen/KrmgNL?editors=1011

+0

Hallo Gianni. Was wäre, wenn: Anweisung $ scope.dataLoaded = true; wird ausgeführt, bevor der Winkel für jeden endet. Das ist was ich brauche. In Ihrem Fall sind die Daten klein, aber bei großen Daten bricht die synchrone Ausführung den Code. –

+0

Sie müssen Versprechen verwenden, dann wird Ihre Funktion erst ausgeführt, nachdem die Daten geladen wurden. Sehen Sie sich diesen CodePen an: http://codepen.io/giannidk/pen/akWGRp?editors=1011 – gianni