2 回答
TA贡献1869条经验 获得超4个赞
Nuxt 通常仅包含 Vue 运行时(不包括编译器)作为优化,可将构建大小减少约 10KB,因为大多数用户使用预编译模板(例如,通过单个文件组件)。Vue 仅运行时构建会在运行时使用 in-DOM 或字符串模板时发出您观察到的警告。
由于您的应用程序在运行时需要字符串模板,因此您需要配置 Nuxt 以使用包含编译器的 Vue 构建:
// nuxt.config.js
export default {
build: {
extend(config) {
config.resolve.alias.vue = 'vue/dist/vue.common'
}
},
}
TA贡献1893条经验 获得超10个赞
下面的代码片段展示了如何<component :is="dynamicComponent"></component>
工作。
2 个组件注册到
Vue
(全局)单击按钮后,
:is
绑定将更新为已注册的组件名称之一单击按钮时,组件本身会向父组件发出事件
Vue.component('Comp1', {
template: `
<div>
COMPONENT 1<br />
<button
@click="() => $emit('clicked', 1)"
>
Click 1
</button>
</div>
`
})
Vue.component('Comp2', {
template: `
<div>
COMPONENT 2<br />
<button
@click="() => $emit('clicked', 2)"
>
Click 2
</button>
</div>
`
})
new Vue({
el: "#app",
data() {
return {
dynamicComponent: 'Comp1'
}
},
methods: {
toggleComponent() {
if (this.dynamicComponent === 'Comp1') {
this.dynamicComponent = 'Comp2'
} else {
this.dynamicComponent = 'Comp1'
}
},
handleClicked(id) {
console.log('click in comp', id)
}
},
template: `
<div>
<button
@click="toggleComponent"
>
SWITCH COMPONENT
</button>
<br />
<component
:is="dynamicComponent"
@clicked="(id) => handleClicked(id)"
></component>
</div>
`
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app"></div>
添加回答
举报