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 相关文章推荐
document.createElement()用法及注意事项(ff下不兼容)
Mar 13 Javascript
关于JS字符串函数String.replace()
Apr 07 Javascript
JavaScript中对象property的删除方法介绍
Dec 30 Javascript
基于jQuery滑动杆实现购买日期选择效果
Sep 15 Javascript
jQuery简单实现列表隐藏和显示效果示例
Sep 12 Javascript
微信小程序 wx.request(object) API详解及实例代码
Sep 30 Javascript
AngularJS实现表单验证功能
Jan 09 Javascript
javascript表单正则应用
Feb 04 Javascript
jQuery实现菜单栏导航效果
Aug 15 jQuery
微信小程序实现搜索指定景点周边美食、酒店
May 18 Javascript
vue-cli随机生成port源码的方法
Sep 02 Javascript
vue3弹出层V3Popup实例详解
Jan 04 Vue.js
利用原生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使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
PHP代码优化之成员变量获取速度对比
2014/02/28 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
原生js实现shift/ctrl/alt按键的获取
2013/04/08 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
javascript表单验证大全
2015/08/12 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
Python random模块常用方法
2014/11/03 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
Python AES加密实例解析
2018/01/18 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
Python如何测试stdout输出
2020/08/10 Python
python 如何调用远程接口
2020/09/11 Python
德国电子商城:ComputerUniverse
2017/04/21 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
师范院校学生自荐信范文
2013/12/27 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
python开发的自动化运维工具ansible详解
2021/08/07 Python
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android
Redis主从复制操作和配置详情
2022/09/23 Redis