解决在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 相关文章推荐
新老版本juqery获取radio对象的方法
Mar 01 Javascript
JavaScript如何获取数组最大值和最小值
Nov 18 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
May 20 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
Jun 07 Javascript
JQuery中Ajax的操作完整例子
Mar 07 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
Mar 28 jQuery
Vue.js 2.0学习教程之从基础到组件详解
Apr 24 Javascript
jQuery 实现双击编辑表格功能
Jun 19 jQuery
JS实现浏览上传文件的代码
Aug 23 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
Aug 25 Javascript
vue数据控制视图源码解析
Mar 28 Javascript
微信小程序canvas开发水果老虎机的思路详解
Feb 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
PHP5+UTF8多文件上传类
2008/10/17 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
python删除特定文件的方法
2015/07/30 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
Python接口开发实现步骤详解
2020/04/26 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
CSS3教程(8):CSS3透明度指南
2009/04/02 HTML / CSS
css3 自定义字体font-face使用介绍
2014/05/14 HTML / CSS
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
小学家长会邀请函
2014/01/23 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
十佳美德少年事迹材料
2014/02/05 职场文书
酒店采购员岗位职责
2014/03/14 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
诉讼财产保全担保书
2014/05/20 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS