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 相关文章推荐
Node.js生成HttpStatusCode辅助类发布到npm
Apr 09 Javascript
Javascript中匿名函数的多种调用方式总结
Dec 06 Javascript
使用jquery实现以post打开新窗口
Mar 19 Javascript
让html页面不缓存js的实现方法
Oct 31 Javascript
JS中三目运算符和if else的区别分析与示例
Nov 21 Javascript
AngularJS ng-controller 指令简单实例
Aug 01 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
Apr 26 Javascript
vue.js实现的经典计算器/科学计算器功能示例
Jul 11 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
Aug 27 Javascript
微信小程序实现判断是分享到群还是个人功能示例
May 03 Javascript
谈谈JavaScript中的函数
Sep 08 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
Nov 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 COOKIE设置为浏览器进程
2009/06/21 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
js event事件的传递与冒泡处理
2009/12/06 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
jquery radio 操作代码
2011/03/16 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
Python实现二分法算法实例
2015/02/02 Python
Python selenium 三种等待方式解读
2016/09/15 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
Java面向对象面试题
2016/12/26 面试题
开办大学饮食联盟创业计划书
2014/01/29 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
新年主持词
2014/03/27 职场文书
房屋出售协议书
2014/04/10 职场文书
学习保证书100字
2015/02/26 职场文书