解决在vue+webpack开发中出现两个或多个菜单公⽤⼀个
组件问题
在vue的实际开发中往往会遇到公⽤⼀个组件的问题,⽐如有⼀个菜单中的两个按钮,点击每个按钮调⽤的是同⼀个组件,其内容是根据路由的参数的不同来请求不同的内容。
第⼀步,⾸先新建⼀个vue+webpack+vuecli的demo,如下操作:
全局安装vue-cli,vue-cil是vue的脚⼿架⼯具,安装命令:
npm install -g vue-cli
第⼆步,进⼊到⼯程⽬录中,创建⼀个vuedemo的⽂件夹⼯程,如下两步操作:
cd vue_test_project //进⼊vue_test_project⽬录下
vue init webpack vuedemo //在vue_test_project⽬录下创建⼀个vuedemo⼯程
输⼊这个命令之后,会出现⼀些提⽰,是什么不⽤管,⼀直按回车即可。
第三步,如下操作:
cd vuedemo
npm install
执⾏npm install需要⼀点时间,因为会从服务器上下载代码啦之类的。并且在执⾏过程中会有⼀些警告信息。不⽤管,等着就是了。如果长时间没有响应,就ctrl+c停⽌掉,然后再执⾏⼀次即可。
最后⼀步,操作如下:
npm run dev
在运⾏了npm run dev之后,会⾃动打开⼀个浏览器窗⼝,就可以看到实际的效果了。这个demo就创建好了。现在就在这个demo中添加⼀些内容,修改成如下:
修改HelloWorld.vue的内容为如下:
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<h2>Essential Links</h2>
<div class="btn">
<router-link :to="{name:'content',params:{differId:'con1'}}">内容按钮1</router-link>
<router-link :to="{name:'content',params:{differId:'con2'}}">内容按钮2</router-link>
</div>
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
}
}
</script>
<style scoped>
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
路由router下的index.html的修改为如下:
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld' import content from '@/components/conDetail'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'HelloWorld',
react router 和vue router
component: HelloWorld,
children:[
{name:'content',path:'content/:differId',component:content} ]
}
]
})
现在创建⼀个conDetail.vue了,如下:
<template>
<div class="same">
这个是相同的内容
<div class="conlist">
<template v-for="item in items">
<p>{{}}</p>
</template>
</div>
</div>
</template>
<script>
export default {
name: 'conDetail',
data () {
return {
msg: '',
differIdType:'',
conlist:[
{'con':'这是第⼀个内容按钮的内容1'},
{'con':'这是第⼀个内容按钮的内容2'}
],
items:[],
}
},
mounted(){
this.differIdType = this.$route.params.differId == 'con1' ? '0' : '1';
if(this.differIdType == 0){
this.items = list;
}else{
this.items = [];
}
},
watch:{
$route:function(to,from){
this.differIdType = to.params.differId == 'con1' ? '0' : '1';
if(this.differIdType == 0){
this.items = list;
}else{
this.items = [];
}
}
}
}
</script>
<style>
</style>
结果就是,当点击内容按钮1,出现了对象的内容,点击内容按钮2,出现相应的内容。当然我这⼉写的是点击按钮2的时候,其items的内容为空数组。这⼉也使⽤了$route的监听。
复⽤组件时,想对路由参数的变化作出响应的话,你可以简单地 watch(监测变化) $route 对象:
const User = {
template: '...',
watch: {
'$route' (to, from) {
// 对路由变化作出响应...
}
}
}
或者使⽤ 2.2 中引⼊的 beforeRouteUpdate 守卫:
const User = {
template: '...',
beforeRouteUpdate (to, from, next) {
// react to
// don't forget to call next()
}
}
总结
以上所述是⼩编给⼤家介绍的解决在vue+webpack开发中出现两个或多个菜单公⽤⼀个组件问题,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!