vue 基于abstract 路由模式 实现页面内嵌的示例代码


Posted in Vue.js onDecember 14, 2020

abstract 路由模式

abstract 是vue路由中的第三种模式,本身是用来在不支持浏览器API的环境中,充当fallback,而不论是hash还是history模式都会对浏览器上的url产生作用,本文要实现的功能就是在已存在的路由页面中内嵌其他的路由页面,而保持在浏览器当中依旧显示当前页面的路由path,这就利用到了abstract这种与浏览器分离的路由模式。

路由示例

export const routes = [
 {
  path: "/",
  redirect: "abstract-route",
 },
 {
  path: "/embed-route",
  name: "embedded",
  component: () =>
   import(/* webpackChunkName: "embed" */ "../views/embed.vue"),
 },
 {
  path: "/abstract-route",
  name: "abstract",
  component: () =>
   import(/* webpackChunkName: "abstract" */ "../views/abstract.vue"),
 },
];

const router = new VueRouter({
 mode: "history",
 base: process.env.BASE_URL,
 routes,
});

本次示例有两个路由,分别为abstract,embedded,其中abstract视图上展开一个抽屉,抽屉当中显示embedded的视图。即:

<template>
 <div>
  <RouterDrawer
   :visible.sync="visible"
   :path="{ name: 'embedded' }"
   size="50%"
   title="drawer comps"
  ></RouterDrawer>
  <el-button @click="visible = true">open drawer</el-button>
 </div>
</template>


// embedded views
<template>
 <div>
  embedded views
 </div>
</template>

vue 基于abstract 路由模式 实现页面内嵌的示例代码

router-drawer 封装

当前项目默认是history 的路由模式,因此在进入abstract页面时,浏览器Url为http://127.0.0.1:8010/abstract-route,而router-drawer要做的是在此基础上,重新实例化一个abstract模式的路由,然后在组件当中利用<router-view />去挂载要被内嵌的目标页面。即:

<template>
 <el-drawer
  :visible.sync="visible"
  v-bind="$attrs"
  :before-close="handleClose"
 >
  <router-view />
 </el-drawer>
</template>
<script>
import { routes } from "../router/index";
import VueRouter from "vue-router";

export default {
 name: "router-drawer",
 props: {
  path: {
   type: Object,
   required: true,
  },
  visible: {
   type: Boolean,
   required: true,
   default: false,
  },
 },
  // 此处实例化一个新的router来配合当前页面的router-view
 router: new VueRouter({
  mode: "abstract",
  base: "/",
  routes,
 }),
 methods: {
  handleClose() {
   this.$emit("update:visible", false);
  },
 },
 mounted() {
  console.log("drawer router", this.$router);
  this.$router.push(this.path);
 },
};
</script>

通过打印日志可以得出两个实例化的路由:

vue 基于abstract 路由模式 实现页面内嵌的示例代码

这样即可实现在不改变当前页面path的前提下加载其他路由中的views了。

代码示例

以上就是vue 基于abstract 路由模式 实现页面内嵌的示例代码的详细内容,更多关于vue 实现页面内嵌的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue+vant实现购物车全选和反选功能
Nov 17 Vue.js
vue单元格多列合并的实现
Nov 26 Vue.js
如何实现vue的tree组件
Dec 03 Vue.js
如何正确解决VuePress本地访问出现资源报错404的问题
Dec 03 Vue.js
Vue与React的区别和优势对比
Dec 18 Vue.js
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
vue+echarts实现中国地图流动效果(步骤详解)
Jan 27 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
Vue的生命周期一起来看看
Feb 24 Vue.js
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
Vue实现点击当前行变色
Dec 14 #Vue.js
Vue实现简单购物车功能
Dec 13 #Vue.js
vue使用element-ui实现表单验证
Dec 13 #Vue.js
vue+element实现动态加载表单
Dec 13 #Vue.js
vue实现两个区域滚动条同步滚动
Dec 13 #Vue.js
vue实现滚动鼠标滚轮切换页面
Dec 13 #Vue.js
详解vue中使用transition和animation的实例代码
Dec 12 #Vue.js
You might like
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
javascript实现评分功能
2020/06/24 Javascript
聊聊Python中的pypy
2018/01/12 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
详解python 中in 的 用法
2019/12/12 Python
Python3查找列表中重复元素的个数的3种方法详解
2020/02/13 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
应届生财务会计求职信
2013/11/05 职场文书
会计主管岗位职责范文
2013/11/08 职场文书
试用期员工考核制度
2014/01/22 职场文书
股份转让协议书
2014/04/12 职场文书
计算机网络专业求职信
2014/06/05 职场文书
高中校园广播稿
2014/10/21 职场文书
2014年节能工作总结
2014/12/18 职场文书
庆七一主持词
2015/06/29 职场文书
实习感想范文
2015/08/10 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
Golang中channel的原理解读(推荐)
2021/10/16 Golang
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js