解决在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 相关文章推荐
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
Dec 03 Javascript
AngularJS基础知识笔记之表格
May 10 Javascript
jquery任意位置浮动固定层插件用法实例
May 29 Javascript
JavaScript实现获得所有兄弟节点的方法
Jul 23 Javascript
一不小心就做错的JS闭包面试题
Nov 25 Javascript
AngularJS指令详解及示例代码
Aug 16 Javascript
深入研究React中setState源码
Nov 17 Javascript
Vue 中的compile操作方法
Feb 26 Javascript
Vue实现简单分页器
Dec 29 Javascript
JS实现深度优先搜索求解两点间最短路径
Jan 17 Javascript
JS中实现一个下载进度条及播放进度条的代码
Jun 10 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
Aug 20 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
原生js实现轮播图
2017/02/27 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
python实现apahce网站日志分析示例
2014/04/02 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
python多线程之事件Event的使用详解
2018/04/27 Python
24式加速你的Python(小结)
2019/06/13 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
python中Django文件上传方法详解
2020/08/05 Python
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
2014/04/28 面试题
金融专业毕业生推荐信
2013/11/26 职场文书
化工专业大学生职业生涯规划书
2014/01/14 职场文书
服务员岗位职责
2014/01/29 职场文书
市场部管理制度
2014/02/02 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS
MySQL分区表实现按月份归类
2021/11/01 MySQL
python和anaconda的区别
2022/05/06 Python