vue v2.5.9とvue-router v.3.0.1を使用しています。
最小再生リンク:https://codepen.io/clarewhatever/pen/eyzMNo
私は動的にVue.extend()
メソッドを使用してコンポーネントに<router-link>
要素を挿入しようとしています。
Vue.component('markdown', {
name: 'markdown',
props: {
routeName: {
type: String,
required: true
},
routeLabel: {
type: String,
required: true
}
},
template: `<span ref="content"></span>`,
mounted() {
let self = this;
let routerLink = `<router-link :to="{ name: ${routeName} }">${routeLabel}</router-link>`;
let MarkdownContent = Vue.extend({
template: `<div>${routerLink}</div>`,
// router: self.$router,
mounted() {
// this.$router is undefined unless router is explicitly defined
console.log(this.$router);
}
});
new MarkdownContent().$mount(this.$refs.content);
}
});
私はに実行している問題は、ルータリンクに渡されるルートが存在しないので、this.$router
がextend()
メソッド内で定義されていないということです。親コンポーネント(router: self.$router
)からルータを渡すと、router-link要素が期待どおりにマウントされます。
Vue.component()
についてはVue.extend()
を交換しましたが、同じ問題が発生しました。私はそれがコンストラクタで呼び出されているvm.$mount
メソッドと何か関係があるに違いないと思いますが、なぜそれがそのように機能するのかはわかりません。すべてのドキュメントがその方法で使用されていることを示していますが、私はvue-routerを含むサンプルを見つけることができませんでした。
を「私はあなたのCodePenが壊れたかもしれないと思うが、私は何を理解します言い返す。新しいVueインスタンスでルータを再定義する必要がある理由を説明してくれてありがとう。 データが非同期呼び出しから来ているため、新しいコンポーネントをマウントしているだけで、 ''コンポーネントをレンダリングしています。データはマークダウンとして戻ってきました。私はmarkdown-itを使ってコンテンツを解析し、HTMLをレンダリングしています。私はルータリンクとしてレンダリングされる内部リンクを検出するための拡張を書いた。コンポーネントがマウントされた後で作成されるため、コンポーネントによって正しく解析されません。 –
loveyrejoice
codepenはうまく動いていますが、何が問題なのですか?なぜ、コンポーネントBのテンプレートに ''をレンダリングできないのですか? –
thanksd
私はページが絶えずリロードしているのを見ています。私はこのようにアプローチするための推論を含めるために上記のコメントを更新しました。 – loveyrejoice