1

У меня есть модель, которую я использую для повторения и создания табличной структуры на моем представлении. У меня есть кнопка, по клику которой я должен получить последнее значение из БД и присвоить модели. Затем я получаю innerHTML модели и создаю pdf-файл моего текущего представления.Как подождать, пока данные будут привязаны к модели в angularjs

У меня возникла проблема, связанная с тем, что до того, как данные полностью привязаны к модели и виду, обновляется следующий оператор, чтобы получить innerHTML контейнера div, и я получаю старый снимок моего представления. Как я могу выполнить выполнение моего заявления до тех пор, пока модель не будет выполнена с назначением, а просмотр обновится?

Любые предложения должны быть высоко оценены.

ответ

1

Вы должны обернуть свой код в $timeout. Это позволит убедиться, что ваш код будет выполнен в следующем цикле, и вы получите последний снимок.

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

Там нет необходимости упоминать какое-либо значение тайм-аута, как это будет называться, как только вид изменился

PS: Добавить $timeout в зависимости.

+0

я не знаю, сколько времени разрыва будет для этого достаточно. В любом случае спасибо. –

+0

вам не нужно указывать время. Этот тайм-аут будет выполнен после обновления. –

+0

спасибо ashfaq, но насколько я знаю, пустой $ timeout делает работу для нас, это вызовет цикл дайджеста, но это не гарантирует, закончится ли присвоение данных модели. –

0

Я хотел бы использовать нг-шоу из углового и отображения содержимого только при загрузке данных в контроллере:

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

Привет, Джанни. if if: statement '$ scope.dataLoaded = true;' выполняется перед угловым для каждой отделки. Это то, что мне нужно. В вашем случае данные небольшие, но в случае огромных данных синхронное выполнение прерывает код. –

+0

Вам нужно использовать обещание, тогда ваша функция будет выполнена только после загрузки данных. Посмотрите этот код: pccdepen.io/giannidk/pen/akWGRp?editors=1011 – gianni

Смежные вопросы