前言
在某些特殊的环境中需要组件实例去挂载dom时,就会用到Vue.extend+$mount手动挂载操作。
使用组件的常规写法
组件导入+注册+使用一条龙
<template>
<div>
<navVue :navList="navList" :openKey="openKey" :clickKey="clickKey" @getOpenKey="getOpenKey"
@getClickKey="getClickKey" @getGrandson="getGrandson" @getGreatGrandson="getGreatGrandson"></navVue>
</div>
</template>
<script>
import navVue from '@/components/nav/nav.vue';
export default {
name: 'Home',
components: {
navVue
}
}
</script>
手动挂载写法
在Vue构造函数时,可以配置el属性,如果配置el属性,可以使用$mount()进行挂载。组件实例化时可以传递vuex、store,也可以绑定props数据和事件。
<template>
<div id="menu">
</div>
</template>
<script>
import navVue from '@/components/nav/nav.vue';
export default {
name: 'Home',
data() {
return {
navList: [
//列表
],
openKey: '',
clickKey: '',
}
},
mounted() {
this.createNavDom()
},
methods: {
createNavDom() {
const p = Vue.extend(navVue)
let vm = new p({
// el:'#menu',
// store: this.$store,
//路由
router: this.$router,
//props
propsData: {
navList: this.navList,
openKey: this.openKey,
clickKey: this.clickKey,
},
//事件绑定
listeners: {
getOpenKey: (res) => {
this.openKey = res
},
getClickKey: (res) => {
this.clickKey = res
}
}
})
vm.$mount('#menu')
console.log(vm)
},
}
}
</script>