vue-router单页面应用的多标签页使用问题
正常的思维
做多vue页面应用,我们的第一反应是配置多个入口点,多个vue应用,编译成多个HTML文件,由服务器来决定路由。这是正常的思维。
但谁知道单页面应用也能做到类似的效果呢。单页面不过是服务器路由变成了客户端路由,但通过一些技巧,也能实现类似服务器多页面路由的效果。
客户端路由多页面的实现方式
我以vue-router
举例
多个根路由
最简单的多页面应用,是设置多个根路由。这样在新标签页打开不同的根路由,就相当于多页面应用。
只是实际上,这些不同的标签页还是同一个vue应用。不过是呈现了不同的组件罢了,网络请求的js资源还是一样。
比如这种
const router = new VueRouter({
routes: [
{
path: '/parent',
component: ParentComponent,
},
{
path: 'standalone-child',
component: ChildComponent
}
]
})
可以在两个标签页打开,http://5234/#/parent
和http://5234/#/standalone-child
。两个组件的内容互不干扰。
看起来客户端路由是利用锚点实现的。
但这无法解决嵌套路由的问题,
比如
const router = new VueRouter({
routes: [
{
path: '/parent',
component: ParentComponent,
children: [
{
path: 'child',
component: ChildComponent
}
]
},
{
path: '/standalone-child',
component: ChildComponent
}
]
});
我们访问http://5234/#/parent/child
居然会把http://5234/#/parent
路由的ParentComponent
组件的内容显示出来。
ChildComponent
看起来似乎就像一个iframe
一样呢。
虽然有时也需要这种效果,但有时也需要这个“iframe”独立显示。我们需要这种控制权。
条件渲染与查询参数
第二种方式是条件渲染与查询参数。在router配置中使用路由参数
+ParentComponent组件中使用条件渲染
- 首先在路由配置中增加路由参数:standalone
const routes = [
{
path: '/',
component: App,
},
{
path: '/parent',
component: ParentComponent,
children: [
{
path: 'child/:standalone',
component: ChildComponent
}
]
}
]
- 修改父组件
我们在父组件中根据standalone
取条件渲染。当standalone='standalone'
时,就只渲染router-view
,否则就使用“iframe”的方式。
<template v-if="$route.params.standalone!='standalone'">
<h1>parent</h1>
<router-view></router-view>
</template>
<template v-else>
<router-view></router-view>
</template>
其效果如下
好处是实现了“iframe”和独立标签页两种形态,缺点是路径变长了
路由参数提升
但是在子路由上面加路由参数来实现这种控制,意味着父组件下的每一个子路由都要加路由参数。
这不免太繁琐,也不太合理。毕竟这种控制应当是父组件对子组件的控制。
更好的方式是将路由参数提升到父路由上。
const routes = [
{
path: '/',
component: App,
},
{
path: '/parent/:standalone',
component: ParentComponent,
children: [
{
path: 'child',
component: ChildComponent
}
]
}
]
vue-router单页面应用的多标签页使用问题的更多相关文章
- 基于Vue的单页面应用的Markdown渲染
之前渲染 Markdown 的时候, 笔者使用的是 mavonEditor 的预览模式, 使用起来比较爽, 只需要引入组件即可, 但是在最近的开发中, 遇到了困难. 主要问题在于作为单页面应用, 站内 ...
- MVC route 和 Angular router 单页面的一些方式
直接看代码和注释吧 ASP.NET MVC router public class RouteConfig { public static void RegisterRoutes(RouteColle ...
- 每天一点产品思考(5):Web端链接跳转在当前页面刷新还是新标签页打开?
一.与交互设计师的突然撕逼 今天阿白在验收产品的时候,在博客首页打开一篇博文,是在原先的页面进行刷新,而不是新开一个标签页打开.阿白让开发改成在新标签页中打开,但是开发说这是设计师设计 ...
- router单页面多个标签tags的用法<router-view></router-view>
<keep-alive><router-view :key="path" /></keep-alive>
- 新手vue构建单页面应用实例
本人写的小程序,功能还在完善中,欢迎扫一扫提出宝贵意见! 步骤: 1.使用vue-cli创建项目2.使用vue-router实现单页路由3.用vuex管理我们的数据流4.使用vue-resource请 ...
- vue等单页面应用优缺点
优点 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件,核心是一个响应的数据绑定系统. 数据驱动 组件化 轻量 简洁 高效 模块友好 页面切换快 缺点 不支持低版本的浏览器 ...
- Vue Router实现页面跳转拦截
场景: 某些页面需要登录之后才可以访问,在页面跳转前做处理,如果要访问的页面A需要登录,则强制调到登录页,并且记录要访问的页面A的链接,在登录成功后自动跳转到页面A 1.在router下的index. ...
- vue单页面项目返回上一页无效,链接变化了,但是页面没有变化
在最近的项目中,返回上一页没有效果,经过好久的排查才发现问题,是路由守卫写法不规范导致. 在项目中用路由守卫做了登录拦截,没登录的跳转到登录页面.页面跳转和拦截都没问题,但是返回上一页就不行了,也没有 ...
- vue等单页面应用及其优缺点
优点: Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件,核心是一个响应的数据绑定系统.MVVM.数据驱动.组件化.轻量.简洁.高效.快速.模块友好. 缺点: 不支持低版本 ...
- Vue修改单页面背景颜色
随机推荐
- JDK12的新特性:CompactNumberFormat
目录 简介 CompactNumberFormat详解 自定义CompactNumberFormat 解析CompactNumber 总结 JDK12的新特性:CompactNumberFormat ...
- Go 语言中结构体的使用和示例
结构体(简称struct)用于创建不同数据类型的成员集合,放入一个单一的变量中.虽然数组用于将相同数据类型的多个值存储在单一变量中,但结构体用于将不同数据类型的多个值存储在单一变量中.结构体对于将数据 ...
- Git 12 IDEA上传本地项目到远程
这里以上传 Spring 开源项目到 Gitee 为例: 1.点击 Create Git Repository 2.选择项目目录 3.添加到缓存库 4.提交到本地库 5.复制远程库地址 6.推送到远程 ...
- 编译opencv: Linux编译opencv
opencv官网:https://opencv.org/releases/ github下载地址:https://github.com/opencv/opencv/releases mkdir ...
- 可视化库 pygal 无法保存成本地文件
问题:在使用可视化库 pygal 保存图像到本地时,出现报错 第一次报错是,提示没有 cairosvg 这个模块,所以直接通过 pip 安装 pip install cairosvg 安装完了以后 ...
- jemter返回结果中文乱码
如图,返回的结果,中文出现乱码 对于这个问题有两种解决方法 第一种:修改jemeter文件,需要重启jemter 在 bin 目录下,找到 jmeter.properties 这个文件,修改编码格 ...
- K8S 性能优化 - K8S APIServer 调优
前言 K8S 性能优化系列文章,本文为第二篇:Kubernetes API Server 性能优化参数最佳实践. 系列文章: <K8S 性能优化 - OS sysctl 调优> 参数一览 ...
- CentOS-6.4启动盘制作过程
目标机器:ThinkPad X230 (i5-3210, 4G DDR3, 500G 7200转),预装win 8 目标系统:CentOS-6.4-x86_64-bin-DVD1.iso 主要参考文章 ...
- 重新点亮linux 命令树————修改网络配置[十一四]
前言 整理一下网络配置的修改. 正文 网络配置命令 ifconfig <接口> <ip地址> [netmask 子网掩码] ifup <接口> ifdown < ...
- Go 单元测试之mock接口测试
目录 一.gomock 工具介绍 二.安装 三.使用 3.1 指定三个参数 3.2 使用命令为接口生成 mock 实现 3.3 使用make 命令封装处理mock 四.接口单元测试步骤 三.小黄书Se ...