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 相关文章推荐
javascript 循环调用示例介绍
Nov 20 Javascript
详解js中class的多种函数封装方法
Jan 03 Javascript
vue分类筛选filter方法简单实例
Mar 30 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
Jun 29 Javascript
canvas基础绘制-绚丽倒计时的实例
Sep 17 Javascript
Three.js利用dat.GUI如何简化试验流程详解
Sep 26 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
Jul 10 Javascript
详解vue为什么要求组件模板只能有一个根元素
Jul 22 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
Dec 02 Javascript
详解Vue的watch中的immediate与watch是什么意思
Dec 30 Javascript
JS如何把字符串转换成json
Feb 21 Javascript
Javascript中window.name属性详解
Nov 19 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
第五节--克隆
2006/11/16 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
解析php下载远程图片函数 可伪造来路
2013/06/25 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
2017/04/11 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
中国医药集团国药在线:国药网
2017/02/06 全球购物
Skyscanner香港:机票比价, 平机票和廉价航空机票预订
2020/02/07 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
物业工程部岗位职责
2015/02/11 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
Python中三种花式打印的示例详解
2022/03/19 Python
Android中的Launch Mode详情
2022/06/05 Java/Android