解决在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 相关文章推荐
HTML DOM的nodeType值介绍
Mar 31 Javascript
jquery随机展示头像代码
Dec 21 Javascript
javascript学习笔记(三)BOM和DOM详解
Sep 30 Javascript
js实现选中复选框文字变色的方法
Aug 14 Javascript
深入理解JavaScript函数参数(推荐)
Jul 26 Javascript
JS闭包的几种常见形式实例详解
Sep 16 Javascript
详细分析JS函数去抖和节流
Dec 05 Javascript
浅谈gulp创建完整的项目流程
Dec 20 Javascript
JS事件流与事件处理程序实例分析
Aug 16 Javascript
基于javascript实现贪吃蛇经典小游戏
Apr 10 Javascript
jQuery实现B2B网站后台管理系统侧导航
Jul 08 jQuery
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 09 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备份/还原MySQL数据库的代码
2011/01/06 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
jQuery 动态酷效果实现总结
2009/12/27 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
react build 后打包发布总结
2018/08/24 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
python查看zip包中文件及大小的方法
2015/07/09 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
Django Highcharts制作图表
2016/08/27 Python
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
Django视图扩展类知识点详解
2019/10/25 Python
python的flask框架难学吗
2020/07/31 Python
python中pyqtgraph知识点总结
2021/01/26 Python
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
教育专业自荐书范文
2013/12/17 职场文书
如何写早恋检讨书
2014/09/10 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
2015年防汛工作总结
2015/05/15 职场文书