Директива 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 создает необходимый цикл дайджеста.

Другие вопросы по тегам