我正在使用VueJS构建博客2.我的大部分文章都存储为Markdown文件,但我希望能够使用Markdown未涵盖的功能涵盖一些更高级的主题。我正在考虑将这些特殊帖子VueJS组件用作模板<article-name>
或<special-article article-title="{{articleTitle}}">
。很简单。
我已经加载了组件,所以我需要做的就是将模板字符串编译成一个真实的模板。我可能会用AngularJS背景而不是Vue来思考太多。
我无法找到在VueJS中动态添加组件到模板的任何可靠方向。
答案 0 :(得分:7)
您可以使用Vue.compile编译模板。请注意,它并非在所有版本中都可用。这在文档中有所涉及。
获取与之相关的数据需要更多的工作。
console.clear()
const articles = [
{
title: "Testing",
articleTemplate: "<article-title></article-title>"
},
{
title: "Testing 2",
articleTemplate: "<special-article :article-title='title'></special-article>"
},
]
Vue.component("article-title",{
template: `<span>Article Title</span>`
})
Vue.component("special-article", {
props:["articleTitle"],
template: `
<div>
<h1>{{articleTitle}}</h1>
<p>Some article text</p>
</div>
`
})
new Vue({
el: "#app",
data:{
articles
},
computed:{
compiledArticles() {
return this.articles.map(a => {
// compile the template
let template = Vue.compile(a.articleTemplate)
// build a component definition object using the compile template.
// What the data function returns is up to you depending on where
// the data comes from.
return Object.assign({}, template, {data(){return a}})
})
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.9/vue.min.js"></script>
<div id="app">
<component v-for="article in compiledArticles" :is="article"></component>
</div>
答案 1 :(得分:0)
VueJS有一个内置组件用于此场景:
<component is="article-component-name"></component>