2016-10-16 11 views
0

$scope.invoicenameには、各請求書のid、name、およびpdfmakeを持つ請求書のデータが格納されています。ユーザーが請求書名を選択すると、選択したpdfmakeによって設計されたpdf文書が表示されます。これは選択のための私のHTMLですng-change指示が期待通りに機能しない

<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); 
    }; 

ここにpdfを表示するhtml要素があります。

<object ng-show="fajll" data="{{fajll}}" type="application/pdf" style="width: 100%; height: 400px;"></object> 

問題は、1つの値を選択すると、その値のpdfが2番目の選択後に表示されることです。たとえば、オプション1,2,3を選択してオプション2を選択した場合、そのオプションのpdfmakeは、1または3を選択した後にのみ表示されます。

+0

可能な限り、選択肢リストを作成するときには、 'ng-repeat'を使って' ng-options'を使うべきです。 'ng-options'構文に切り替えることを考えて、まだ期待どおりに動作しない場合は質問を更新することをお勧めします。 – Claies

+0

また、 'value'をあなたのモデルと同じに設定するのは意味がありません。あなたはすべてのドロップダウンの値があなたのモデルと等しくなることを望んでいません.... – Claies

答えて

0

$scope.$applyを使用すると、AngularJSフレームワークはスコープ変数の変更を認識します。

pdfMake.createPdf(doc).getDataUrl(function(dataURL) { 
     $scope.fajll= dataURL; 
     $scope.$apply(); 
    }); 
.getDataURl

メソッドへの引数として提供機能はAngularJSフレームワークの外に非同期的に実行されています。 object要素のdata属性は、ダイジェストサイクルの後にのみ更新されます。 $scope.$applyは、必要なダイジェストサイクルを作成します。

+0

それは知っている!どうもありがとうございます。 – user3568043

関連する問題