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修改单页面背景颜色
随机推荐
- Go 编程语言详解:用途、特性、与 Python 和 C++ 的比较
什么是Go? Go是一个跨平台.开源的编程语言 Go可用于创建高性能应用程序 Go是一种快速.静态类型.编译型语言,感觉上像动态类型.解释型语言 Go由Robert Griesemer.Rob Pik ...
- C# 面试问答
引用:https://www.cnblogs.com/zh7791/p/13705434.html 1.什么是 COM? COM 代表组件对象模型.COM 是微软技术之一.使用这项技术,我们可以开 ...
- HarmonyOS账号服务,畅行鸿蒙生态所有应用与服务
账号对于用户来说并不陌生,在购买新设备或者使用新应用的时候,用户常常会被引导注册或者登录账号,账号就是用户在这些设备或应用内的通行证.根据华为上半年的一项统计,整体上中国网民人均下载App量在68个, ...
- MogDB企业应用 之 Rust驱动
引子 Rust 是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言.Rust 在语法上和类似 C++,但是设计者想要在保证性能的同时提供更好的内存安全. ...
- etcd 集群安装
1.环境准备 下载安装包:https://github.com/etcd-io/etcd/releases/ 这里下载的安装包为:etcd-v3.5.9-linux-amd64.tar.gz,即我们当 ...
- JVM简明笔记2:运行时数据区
1 内存布局总体结构 根据 JVM 规范,JVM 内存共分为虚拟机栈(Virtual Machine Stacks).堆(Heap).方法区(Method Area).程序计数器(Program Co ...
- 初接触:从创建工程到导出gerber(学习Altium Designer)
学习Altium Designer Altium Designer的工程文件后缀为.PrjPcb,主要包含Source Documents和Libraries.Source Documents里面有S ...
- 力扣43(java)-字符串相乘(中等)
题目: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 注意:不能使用任何内置的 BigInteger 库或直接将输入 ...
- 多年锤炼,迈向Kata 3.0 !走进开箱即用的安全容器体验之旅| 龙蜥技术
简介: 袋鼠与 Kata 将会碰撞出什么样的火花? 文/云原生 SIG(Special Interest Group) 一.Kata 的过去 让我们将时钟拨回 2015 年 5 月,Hyper.sh ...
- Databricks 企业版 Spark&Delta Lake 引擎助力 Lakehouse 高效访问
简介:本文介绍了Databricks企业版Delta Lake的性能优势,借助这些特性能够大幅提升Spark SQL的查询性能,加快Delta表的查询速度. 作者: 李锦桂(锦犀) 阿里云开源大数据 ...