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获取table中的某行全部td的内容方法
Mar 08 Javascript
Seajs的学习笔记
Mar 04 Javascript
javascript中setTimeout使用指南
Jul 26 Javascript
鼠标悬停小图标显示大图标
Jan 22 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
Feb 17 Javascript
详解Angular 开发环境搭建
Jun 22 Javascript
AngularJS ionic手势事件的使用总结
Aug 09 Javascript
jQuery选择器之属性筛选选择器用法详解
Sep 19 jQuery
Node.js中的child_process模块详解
Jun 08 Javascript
vue结合axios与后端进行ajax交互的方法
Jul 06 Javascript
element-ui 表格数据时间格式化的方法
Aug 24 Javascript
js实现无缝轮播图插件封装
Jul 31 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 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
PHP编码转换
2012/11/05 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
python中的字符串内部换行方法
2018/07/19 Python
python实现简单加密解密机制
2019/03/19 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
pytorch标签转onehot形式实例
2020/01/02 Python
Django crontab定时任务模块操作方法解析
2020/09/10 Python
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
美国第一香水网站:Perfume.com
2017/01/23 全球购物
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
TCP/IP模型的分界线
2012/12/01 面试题
学校宣传标语
2014/06/18 职场文书
环境保护标语
2014/06/20 职场文书
工作失误检讨书
2015/01/26 职场文书