2017-10-19 9 views
0

Vue.js API documentationによると、の内部にはmounted()が表示されますが、この場合はレンダリング全体がどのように表示されるかはわかりません。Vue.jsでは、AJAX呼び出しを含め、ビュー全体がレンダリングされたことをどのように知ることができますか?

私はintro.jsライブラリイントロVue.jsを統合しようとしていますが、次のようにnextTickの内部introJs().start()を入れて、私が使用している場合:DOMはまだ完全に準備ができていないとintroJsが失敗したようにそれはそう

mounted: function() { 
    this.$nextTick(function() { 
    // Code that supposedly will run only after the 
    // entire view has been rendered 
     introJs().start() 
    }) 
} 

すべてのイントロステップを正常に表示します。

Reproduction link

どのように私はすべてが本当に準備ができていることを知ることができますか? Vue.js内でintroJを起動する他の方法はありますか?

+0

私はドキュメントが間違っているとは思わないが、何か別のものが続かなければならない。あなたが問題を示すjsfiddleを作成できれば、私は助けてうれしいです。 –

+0

@EricGuan私は再生リンクに取り組んでいます。ありがとう – tatsuhirosatou

+0

@EricGuan再生リンク準備! – tatsuhirosatou

答えて

0

問題はv-ifを使用していることです。条件がfalseの場合、html要素はドキュメントにはなく、introjsはそれを見つけることができません。ブラウザの開発ツールで、v-ifの条件がfalseのときにコンポーネントを見ると、htmlコメント<!-- -->が表示されます。

簡単な修正はv-showです。 v-showdisplayのcssプロパティをトグルするので、この方法では、要素がドキュメント内にあり、イントロはそれを見つけることができ、ユーザーはまだそれを見ません。

+0

同じ問題が、AJAXロードによって導入された遅れのためにも発生します。私はそれを遅延を加えてシミュレートしました。ツアーでAJAXの読み込み準備が整う前に十分速くクリックすると、イントロは間違った場所に表示されます。 – tatsuhirosatou

+0

これで、 'mounted 'はもはや適切ではありません。 ajaxの状態を追跡するアイテムごとに変数が必要です。 https://jsfiddle.net/eejn7p27/1/。これは、すべてのAjaxが完了すると、イントロを開始します。 –

関連する問題