Директива ng-change не работает должным образом
В $scope.invoicename
хранятся данные для счетов с идентификатором, именем и pdfmake для каждого счета. Когда пользователь выбирает имя счета-фактуры, он должен отображать документ PDF, созданный выбранным PDF-файлом. Это мой HTML для избранных
<select class="form-control" ng-change="zafakturu(dizajn.pdfmake)" ng-model="dizajn.pdfmake">
<option value={{dizajn.pdfmake}} ng-repeat="dizajn in invoicename" selected="selected">{{dizajn.name}}</option>
</select>
А вот функция, вызываемая при изменении, и функция makeInvoice, которая должна отображать документ PDF.
var makeInvoice = function(doc){
pdfMake.createPdf(doc).getDataUrl(function(dataURL) {
$scope.fajll= dataURL;
});
console.log(doc);
};
$scope.zafakturu = function (pdf){
$scope.docDefinition = eval("(" + pdf + ")");
makeInvoice($scope.docDefinition);
};
А вот HTML-элемент, который отображает PDF.
<object ng-show="fajll" data="{{fajll}}" type="application/pdf" style="width: 100%; height: 400px;"></object>
Проблема в том, что когда я выбираю одно значение, pdf с этим значением отображается после второго выбора. Например, если у меня есть опции 1, 2, 3 и я выбрал опцию 2, pdfmake для этой опции будет отображаться только после того, как я выберу 1 или 3. Если кто-нибудь может помочь?
1 ответ
Использование $scope.$apply
информировать инфраструктуру AngularJS об изменениях переменной области видимости.
pdfMake.createPdf(doc).getDataUrl(function(dataURL) {
$scope.fajll= dataURL;
$scope.$apply();
});
Функция представлена в качестве аргумента .getDataURl
Метод выполняется асинхронно вне рамок AngularJS. data
Атрибут элемента объекта обновляется только после цикла дайджеста. $scope.$apply
создает необходимый цикл дайджеста.