2016-10-06 3 views
0

現在、私はデータを収集するためにPHPを使用していますが、1つのpdfに印刷し、新しいブラウザタブでpdfを開く必要があります。問題は、多くのユーザーと多数のドキュメントを同時に印刷するとすぐに多くのトラフィックを生成することです。だから私は1つのhtmlですべてを収集し、新しいタブで開いて、バックエンドからのデータを埋めて、それを印刷する方法を探しています。 私の問題は、新しいブラウザタブのVueJSを初期化することです。 vue.js:1141 [Vue警告]:要素を見つけることができません:#app新しいタブを開いた後にVueJsを初期化する

私はVueJSがSPAで動作するのではないかと推測します。私のアイデアを実装する方法はありますか?

ここでは、新しいタブのテンプレートを新しいタブで開く必要があります。私のJSコードの下

<div id="app"> 
<printing-form v-for="printedForm in printedForms" track-by="id" :printed-form="printedForm"></printing-form> 
</div> 

<template id="printingForm-template"> 
    Some HTML need to be printed in new tab. 
</template> 

VueJs

var VuePrinting = (function() { 
    return { 
    vueInit: function() { 
    Vue.component('printingForm', { 
    temlate: newWindow.document.getElementById('printingForm-template') 
    }); 

    var vm = new Vue({ 
    el: newWindow.document.getElementById('app'), 
    data: { 
     printedForms: [ 
     { obj1 }, 
     { obj3 }, 
     { obj3 } 
     ] 
     } 
    }); 
    } 
    } 
})(); 

UPDATEため

var printButton = $('#print-button'); 
    printButton.on('click', function(e) { 
    e.preventDefault(); 
    printButton.unbind('click'); 
    printButton.css('color', '#008000'); 
    var idNumbers = TopPanel.getArrayOfId(); 
    if (idNumbers == '') { 
     idNumbers = TopPanel.getIdNumber(); 
    } 
    var url = window.location.href + '/form'; 

    $.ajax({ 
    url: url, 
    data: 'id=[' + idNumbers + ']', 
    success: function(data) { 
     var newWindow = window.open(url); //Open URL in new tab 
     var printedIds = $.parseJSON('[' + idNumbers + ']'); 
     printedIds.forEach(function(item, i, arr) { 
     var printedField = $('#top-row-'+item).find('.table-field-printed'); 
     if (!printedField.hasClass('true-value')) { 
      printedField.addClass('fa'); 
      printedField.addClass('fa-check'); 
      printedField.addClass('true-value'); 
     } 
     }); 
     printButton.css('color', '#4f5762'); 
     printButtonInit(); 
     newWindow.onload = function() { 
     VuePrinting.vueInit(newWindow); //Here I initialize VueJS module 
     } 
    }, 
    error: function(xhr, textStatus, errorThrown) { 
     alert($.parseJSON(xhr.responseText)); 
     printButton.css('color', '#4f5762'); 
     printButtonInit(); 
    }, 
    }); 
}); 
} 

この別のモジュールVueJSを初期化するには:私は今、それが正しい動作しますが、RoyJコメントの後に私のコードを修正しました。一つだけノートが...テンプレートはまた、セレクタから変更する必要があります:あなたはelためのセレクタを指定すると

newWindow.document.getElementById('printingForm-template') 
+0

私はどこかで読んでいますが、bodyタグの上にマウントすることができないこと、それを自分で確認していません。 divを本体の中に入れて、代わりにマウントしてみてください。 – Tommy

+0

ここで "body"を検索:http://vuejs.org/api/ – Tommy

答えて

0

、Vueのはそれを現在のドキュメントになります。新しいタブは現在のドキュメントの一部ではありません。

Save a reference when you open the tabWrite the HTML into its document。文書のうち、#appを照会し、代わりにあなたのVueの設定でセレクタの実際の要素を使用します。

var vm = new Vue({ 
    el: newWindow.document.getElementById('app') 
}); 
+0

あなたのお勧めに基づいてコードを修正しましたが、今はあります: vue.js:1141 [Vue警告]:無効なテンプレートオプション:#printingForm-テンプレート –

関連する問題