解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题


Posted in Javascript onNovember 28, 2017

在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中添加一些内容,修改成如下:

解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题

修改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',
 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>{{item.con}}</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 = this.conlist;
  }else{
  this.items = [];
  }
 },
 watch:{
 $route:function(to,from){
  this.differIdType = to.params.differId == 'con1' ? '0' : '1'; 
  if(this.differIdType == 0){
  this.items = this.conlist;
  }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 route changes...
 // don't forget to call next()
 }
}

总结

以上所述是小编给大家介绍的解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Javascript实现的鼠标经过时播放声音
May 18 Javascript
Javascript下IE与Firefox下的差异兼容写法总结
Jun 18 Javascript
javascript自然分类法算法实现代码
Oct 11 Javascript
jquery sortable的拖动方法示例详解
Jan 16 Javascript
JavaScript数组常用操作技巧汇总
Nov 17 Javascript
Jquery api 速查表分享
Jan 12 Javascript
用jQuery向div中添加Html文本内容的简单实现
Jul 13 Javascript
js控制文本框禁止输入特殊字符详解
Apr 07 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
May 03 Javascript
详解关于element el-button使用$attrs的一个注意要点
Nov 09 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
Aug 06 Javascript
详解基于element的区间选择组件校验(交易金额)
Jan 07 Javascript
vue-music关于Player播放器组件详解
Nov 28 #Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
Nov 28 #Javascript
JS实现的找零张数最小问题示例
Nov 28 #Javascript
JavaScript数据结构之单链表和循环链表
Nov 28 #Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
Nov 28 #Javascript
关于angularJs清除浏览器缓存的方法
Nov 28 #Javascript
AngularJs 禁止模板缓存的方法
Nov 28 #Javascript
You might like
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
php头像上传预览实例代码
2017/05/02 PHP
PDO::quote讲解
2019/01/29 PHP
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
关于Javascript回调函数的一个妙用
2016/08/29 Javascript
Vue中父组件向子组件通信的方法
2017/07/11 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
详解小程序横屏方案对比
2020/06/28 Javascript
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
python自然语言编码转换模块codecs介绍
2015/04/08 Python
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
学生手册评语
2014/05/05 职场文书
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技
JavaScript ES6的函数拓展
2022/01/18 Javascript
Redis高可用集群redis-cluster详解
2022/03/20 Redis