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 相关文章推荐
最近项目写了一些js,水平有待提高
Jan 31 Javascript
JavaScript将取代AppleScript?
Sep 18 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
Oct 20 Javascript
使用JS画图之点、线、面
Jan 12 Javascript
实现placeholder效果的方案汇总
Jun 11 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
Nov 25 Javascript
layui前端框架之table表数据的刷新方法
Aug 17 Javascript
Vue点击切换颜色的方法
Sep 13 Javascript
Vue将页面导出为图片或者PDF
Aug 17 Javascript
javascript Canvas动态粒子连线
Jan 01 Javascript
在Echarts图中给坐标轴加一个标识线markLine
Jul 20 Javascript
基于原生JS封装的Modal对话框插件的示例代码
Sep 09 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微信模板消息操作示例
2017/06/29 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
JS防止用户多次提交的简单代码
2013/08/01 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
[00:10]DOTA2全国高校联赛 以DOTA2会友
2018/05/30 DOTA
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
在Python中关于中文编码问题的处理建议
2015/04/08 Python
Python文件的读写和异常代码示例
2017/10/31 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
python的range和linspace使用详解
2019/11/27 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
综合测评自我鉴定
2013/10/08 职场文书
信息管理专业推荐信
2013/10/29 职场文书
学习雷锋精神心得体会范文
2014/03/12 职场文书
学校门卫岗位职责
2014/03/16 职场文书
任命书范本大全
2014/06/06 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
你真的会用Mysql的explain吗
2022/03/31 MySQL