vue 项目只要不是静态页面,一般都会和官方的路由管理器 vue-router 一起使用。

最近项目有一个需求,是在地址栏输入路由,跳转到对应路由组件,在开发环境中这样做是可以跳转的,但是项目打包后,通过地址栏跳转会报错。

因为 vue 在页面上显示哪个组件是根据 vue-router 进行控制的,在地址栏上直接输入路由名称,并不能触发 vue-router 的规则,所以只能通过监听地址的改变,利用回调函数在组件内部进行动态修改路由。

方式一:history 模式

vue-router 默认是 hash 模式,通过更改模式为 history 模式可以解决这个问题,但是这需要后端配合,更改服务端配置,虽然过程稍麻烦但也是一个办法,有兴趣的朋友可以查看往期文章 。

方式二:hashchange 事件

什么是 hash?

hash 就是 URL 地址中 # 字符后面的字符串。

更改它不会导致整个页面重新加载,而且可以定位到元素 id 或 name 与之相同的位置(锚点)。

window.location.hash可以获取到 hash。比如 localhost:8080/#/abcde 的 location.hash="#/abcde"。

通过监听 hash 的状态,来动态修改 vue-router 的路由,是页面进行组件切换,这样就不会导致页面报错或 404 了。

当 hash 被修改时,将触发 hashchange 事件(IE8 +支持):

window.addEventListener('hashchange',function(e) {

console.log(e.oldURL);

console.log(e.newURL)

},false);

所以在 App.vue 中添加此事件:

mounted(){

window.addEventListener('hashchange',()=>{

var currentPath = window.location.hash.slice(1); // 获取输入的路由

if(this.$router.path !== currentPath){

this.$router.push(currentPath); // 动态跳转

}

},false);

}

这样即可解决,在地址栏输入路由跳转无效问题。

补充:Vue路由——ie上地址栏输入路由页面不更新

情景:在ie11上从当前A页面(/a)跳转B页面(/b),在地址栏直接修改路由回车跳转B页面,发现页面还是A页面,但是地址栏地址已经是B页面地址。而且控制台并无报错。

解决方法:在App.vue中添加判断ie加手动修复:

mounted () {

if (!!window.ActiveXObject || 'ActiveXObject' in window) {

window.addEventListener('hashchange', () => {

let currentPath = window.location.hash.slice(1)

if (this.$route.path !== currentPath) {

this.$router.push(currentPath)

}

}, false)

}

}

onhashchange事件ie8就已经支持了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

vue 直接输入路由地址进入_vue地址栏直接输入路由无效问题的解决相关推荐

  1. vue动态设置文字布局方式_VUE+Canvas实现输入文字生成对应的字体图片小功能

    你是不是经常浏览字体网站的时候,发现他们的"字体生成器"和预览功能很好奇,为什么输入框输入文字之后,点击预览,下面都会修改对应的字体内容,以便达到了没有安装字体也可以预览这个字体效 ...

  2. ts watch路由 参数变化_vue watch 监听路由变化

    首页 列表页 购物车 会员中心 import store from "../../store" import { mapState, mapActions } from " ...

  3. Vue获取当前路由地址以及当前页面的地址

    最近在做一个电商项目,其中搜索功能封装成一个组件用在多个路由组件中,用户通过输入相关商品名进行搜索,其中要实现的一个点就是:要是当前为商品页面则更新商品列表,若不是商品页面,则新开一个商品窗口. 实现 ...

  4. vue 跳转到指定路由地址 (可附带参数)

    1. vue 使用 router-link 跳转到指定路由地址 使用 router-link <span class="product-justify" @click=&qu ...

  5. vue中如何获取当前路由地址

    vue获取当前路由地址 1.router和$route的区别 $router: 路由操作对象,只写.需要对路由进行操作时使用.如路由跳转 $route: 路由信息对象,只读.获取路由相关信息时使用.如 ...

  6. vue刷新页面如何保证路由不变_vue 刷新之后 嵌套路由不变 重新渲染页面的方法...

    vue 刷新之后 嵌套路由不变 重新渲染页面的方法 解决嵌套路由刷新时,路由没有变化,正常情况下页面是不会重新渲染的 1.在router-view中加上条件渲染 v-if 默认为true.让它显示出来 ...

  7. vue 刷新嵌套路由_vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法...

    解决vue-router嵌套路由(子路由)在history模式下刷新无法渲染页面的问题,具体内容如下 一. 异常描述 本来使用的是vue-router的hash模式,但是hash模式下url需要带&q ...

  8. vue 跳转路由后返回上一页还是当前页面,但是路由地址有改变(已解决)

    问题描述: 在开发vue项目的时候,涉及到路由跳转,前面的一顿操作配置路由的都很舒畅,跳转返回啥的都没问题.问题是啥呢,我在做个有视频播放的页面的时候,由于代码是参考别人的(狗头),导致在首页点击跳转 ...

  9. vue 路由地址不跳转 解决办法

    这里写自定义** vue 路由地址不跳转 解决办法 这是我的报错原因,因为我是一个后端开发对vue不了解 我的报错原因是因为: menu.json 中的路径 path:****** name***** ...

  10. vue获取上一个页面路由地址

    项目需求是需要在当前页面获取上一个路由地址,并根据不同地址进行请求不同接口和页面样式调整的操作.记录一下: 需要用到vue-router的beforeRouterEnter钩子 其实也就是一个组件内的 ...

最新文章

  1. java面向对象-------静态初始化块
  2. 自己实现 koa 中间件的 app.use 和 next 函数
  3. 【打CF,学算法——二星级】Codeforces Round #313 (Div. 2) B. Gerald is into Art(水题)...
  4. rabbitMQ(二):Fanout Exchange
  5. Mysql手动增加一列_Blog of Grow_百度空间
  6. 关于Resnet50和ResNeXt50的参数量的简单计算(只考虑卷积层和全连接层)
  7. Github简单使用 - 更新项目
  8. 程序员硬核测评:全方位测评 GaussDB(for Redis) 和开源 Redis
  9. EGOTableViewPullRefresh实现下拉刷新
  10. Qt保存日志调试信息输出文件
  11. 四叉树——图片应用实例
  12. 计算机第一代及第四代发展概况,1计算机发展概况解析.ppt
  13. 第八章、Zigbee模块的性能及测试
  14. 傅里叶变换、拉普拉斯变换、z变换之间的联系
  15. linux的网络管理,Linux之网络管理
  16. 速卖通如何避免差评?
  17. 外地人一年内直接落户上海
  18. 技嘉1080显卡体质测试软件,技嘉GTX 1080 Xtreme Gaming显卡简介
  19. ubuntu定时执行任务
  20. (java)求最大公约数

热门文章

  1. 最小二乘估计与卡尔曼滤波公式推导
  2. java lte cellid 如何获取_Android基站定位——通过手机信号获取基站信息(一)
  3. 不属于微型计算机的技术特标,计算机组成原理汇总
  4. 电动车 碟刹维修 液体的杠杆原理, 帕斯卡定律
  5. AcWing 1183电力(Tarjan求割点)
  6. 宽带经常掉线应如何解决
  7. 深度报道 | 瀚高软件CTO郑晓军:以开源之路发展国产数据库符合市场规律
  8. WSN基于自适应网格的多目标定位算法
  9. JavaScript 内置对象
  10. 小学计算机上机评分表,海安市实验小学信息技术学科素养考核方案