私は通常のjsファイル(.vueではなく)とインラインテンプレートでvueを使用しています。サブページに依存してロードされるコンポーネントはほとんどありません。私がしたいのは、いくつかのコンテナ(たとえば#blog)の長さが0より大きい場合、jQueryが追加のvue coponentsスクリプトをロードすることによって、グローバルvue変数とvue copeentsを読み込んで動的にロードすることです。JSファイルが外部にロードされている場合、Vueはコスポネントを登録できません
VueはVueタグが見つかりましたが、コンポーネントを登録できませんでした。
JSファイルを動的にロードする方法はありますか?私は、特定のサブページだけにロードしたいjsファイルがたくさんある本当に大きなWebサイトを持っています。それはすべてのjQueryライブラリで完璧に動作しますが、悲しいことにVueコンポーネントでは機能しません。以下
例コンポーネント:
Vue.component('blog-entries', {
name: "blog-entries",
template: require('js/vue/home/blog/blog.html').template,
data: function() {
return {
blog_entries: [
]
}
}
});
とエラー:
[Vue warn]: Unknown custom element: - did you register the component correctly? For recursive components, make sure to provide the "name" option.
(found in)
負荷スクリプト:
function loadScript(scriptName, callback) {
if (!_arr[scriptName]) {
_arr[scriptName] = true;
var body = document.getElementsByTagName('body')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = scriptName;
// then bind the event to the callback function
// there are several events for cross browser compatibility
// script.onreadystatechange = callback;
script.onload = callback;
// fire the loading
body.appendChild(script);
} else if (callback) {
callback();
}
};
'blog-entries' jsファイル全体が必要な場合は、これらのタグを利用できるようにするには他の方法がありますか? – susanoo
コンポーネント名があらかじめ分かっていないのですか?はい、ハードコードされたものだけでなく、コンポーネント名を動的に読み込むことができます。上記の完全なデモコードを追加して私の答えを編集しました。 – elfan