Vue中通过vue-router实现命名视图的问题


Posted in Javascript onApril 23, 2020

在用vue-router路由处理一些需求的时候 例如 有时需要同时同级展示多个组件 而不是嵌套展示
例如:创建一个布局 有侧导航和主内容两个视图 此时命名视图就派上用场了

在路由对象中 使用components属性 以使一个路径下可挂载多个子组件:
之后即可为每个要展示的组件指定一个名字
默认name为default 即 不设置名字

<script>
 var header={
  template:"<h1>头部</h1>"
 }
 var leftBox={
  template:"<h1>左侧边栏</h1>"
 }
 var mainBox={
  template:"<h1>主体</h1>"
 }

 // 创建路由对象
 var router=new VueRouter({
  routes:[
   // 使用components属性 一个路径下挂载多个子组件
   {path:"/",components:{
    // 默认展示的组件
    "default":header,
    // 为组件命名
    "left":leftBox,
    "main":mainBox
   }}
  ]
 })

 var vm=new Vue({
  el:'#app',
  data:{},
  methods:{},
  // 挂载路由对象
  router
 });
</script>

然后 在页面中使用<router-view>标签进行展示 在标签上指定name
若指定了name 那么该<router-view>只能放指定name的组件

<div id="app">
	<!-- 不指定name 则使用默认(default)的组件 -->
	<router-view></router-view>
	<!-- 为<router-view>指定name 该<router-view>只能放指定name的组件 -->
	<router-view name="left"></router-view>
	<router-view name="main"></router-view>
</div>

ps:下面介绍下vue-router的原理

更新视图但不重新请求页面,是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有2种方式,Hash模式和History模式:

(1)利用URL中的hash("#");

(2)利用History interface在HTML5中新增的方法;

1、Hash模式: 

      hash(#)是URL 的锚点,代表的是网页中的一个位置,单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页,也就是说 #是用来指导浏览器动作的,对服务器端完全无用,HTTP请求中也不会不包括#;同时每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用”后退”按钮,就可以回到上一个位置;

2、History模式: 

    HTML5 History API提供了一种功能,能让开发人员在不刷新整个页面的情况下修改站点的URL,就是利用 history.pushState API 来完成 URL 跳转而无须重新加载页面;

通常情况下,我们会选择使用History模式,原因就是Hash模式下URL带着‘#'会显得不美观;但实际上,这样选择一不小心也会出问题;比如:

但当用户直接在用户栏输入地址并带有参数时: 
Hash模式:xxx.com/#/id=5 请求地址为 xxx.com,没有问题; 
History模式: xxx.com/id=5 请求地址为 xxx.com/id=5,如果后端没有对应的路由处理,就会返回404错误; 

为解决这一问题,vue-router提供的方法是:

在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。 

给个警告,因为这么做以后,你的服务器就不再返回 404 错误页面,因为对于所有路径都会返回 index.html 文件。为了避免这种情况,你应该在 Vue 应用里面覆盖所有的路由情况,然后在给出一个 404 页面。或者,如果你使用 Node.js 服务器,你可以用服务端路由匹配到来的 URL,并在没有匹配到路由的时候返回 404,以实现回退。

到此这篇关于Vue中通过vue-router实现命名视图的问题的文章就介绍到这了,更多相关vue vue-router命名视图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jquery 学习笔记 传智博客佟老师附详细注释
Sep 12 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
Feb 27 Javascript
js实现漂浮回顶部按钮实例
May 06 Javascript
JS判断是否长按某一键的方法
Mar 02 Javascript
详解Javascript函数声明与递归调用
Oct 22 Javascript
JS百度地图搜索悬浮窗功能
Jan 12 Javascript
基于vue.js中事件修饰符.self的用法(详解)
Feb 23 Javascript
浅谈React Native 传参的几种方式(小结)
May 21 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
Aug 07 Javascript
vue-cli 为项目设置别名的方法
Oct 15 Javascript
vue自定义树状结构图的实现方法
Oct 18 Javascript
Webpack3+React16代码分割的实现
Mar 03 Javascript
利用原生JS实现欢乐水果机小游戏
Apr 23 #Javascript
JS eval代码快速解密实例解析
Apr 23 #Javascript
浅谈vue权限管理实现及流程
Apr 23 #Javascript
js实现简单的贪吃蛇游戏
Apr 23 #Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
Apr 23 #Javascript
vue项目打包之开发环境和部署环境的实现
Apr 23 #Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
Apr 23 #Javascript
You might like
功能齐全的PHP发送邮件类代码附详细说明
2008/07/10 PHP
浅析php header 跳转
2013/06/17 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
初始Nodejs
2014/11/08 NodeJs
assert()函数用法总结(推荐)
2017/01/25 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
js图片上传的封装代码
2017/08/01 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
js实现双色球效果
2020/08/02 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
Python运算符重载详解及实例代码
2017/03/07 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
如何更优雅地写python代码
2019/07/02 Python
Django REST framework 视图和路由详解
2019/07/19 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
python函数超时自动退出的实操方法
2020/12/28 Python
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
大学生毕业自我评价范文分享
2013/11/11 职场文书
法人授权委托书格式
2014/04/08 职场文书
财产公证书格式
2014/04/10 职场文书
十佳少年事迹材料
2014/12/25 职场文书
教师素质教育心得体会
2016/01/19 职场文书
SQLServer中exists和except用法介绍
2021/12/04 SQL Server