解决在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 验证表单(form)中的单选(radio)值
Sep 08 Javascript
js各种验证文本框输入格式(正则表达式)
Oct 22 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
Oct 12 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
Apr 02 Javascript
JS实现单行文字不间断向上滚动的方法
Jan 29 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
Jul 04 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
Jul 05 Javascript
weex slider实现滑动底部导航功能
Aug 28 Javascript
Angular6笔记之封装http的示例代码
Jul 27 Javascript
详解vue-cli3使用
Aug 14 Javascript
浅析vue中的MVVM实现原理
Mar 04 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
Jul 14 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
简单的PHP图片上传程序
2008/03/27 PHP
php 求质素(素数) 的实现代码
2011/04/12 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
Jquery中dialog属性小记
2010/09/03 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
Python3爬虫全国地址信息
2019/01/05 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
Python多分支if语句的使用
2020/09/03 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
文明学生事迹材料
2014/01/29 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
营销经理工作检讨书
2014/11/03 职场文书
高一数学教学反思
2016/02/18 职场文书