解决在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 相关文章推荐
Prototype 工具函数 学习
Jul 23 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
Nov 21 Javascript
Jquery实现的角色左右选择特效
May 21 Javascript
jquery重复提交请求的原因浅析
May 23 Javascript
js命名空间写法示例
Dec 18 Javascript
jquery取消事件冒泡的三种方法(推荐)
May 28 Javascript
MUI  Scroll插件的使用详解
Apr 13 Javascript
JS查找数组中重复元素的方法详解
Jun 14 Javascript
JavaScript高阶函数_动力节点Java学院整理
Jun 28 Javascript
Vue formData实现图片上传
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
用PHP连接Oracle数据库
2006/10/09 PHP
基于mysql的bbs设计(三)
2006/10/09 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
Prototype String对象 学习
2009/07/19 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
详解webpack进阶之插件篇
2017/07/06 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
javascript实现计算指定范围内的质数示例
2018/12/29 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
Python实现的调用C语言函数功能简单实例
2019/03/13 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
Python类的继承super相关原理解析
2020/10/22 Python
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
学历公证委托书
2014/04/09 职场文书
学校2014年度工作总结
2014/12/06 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
钢琴师观后感
2015/06/12 职场文书
公司保密管理制度
2015/08/04 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
SQL之各种join小结详细讲解
2021/08/04 MySQL
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
Nginx利用Logrotate实现日志分割
2022/05/20 Servers