【问题标题】:How to deal with fragment GET parameters in Vue Router?Vue Router 中如何处理片段 GET 参数?
【发布时间】:2018-11-11 18:24:41
【问题描述】:

在尝试使用 Web 应用程序流实现 Gitlab's OAuth 的后端后,我正在我的 Vue 前端中尝试隐式授予。

API 发送给我的访问代码是片段 url 参数格式。这意味着它使用哈希符号 #foo=bar&moo=var 而不是标准的 ?foo=bar&moo=var,这与默认的 Vue 路由器配置冲突。

在 Vue 路由器中尝试 history mode 后,在他的 url 中使用了 #,我可以使用 $route.hash 访问 Vue Router 参数。我目前的问题是我必须自己拆分和修剪参数,如下所示:

const params = this.$route.hash.split('&').map(part => part.replace(/#/, ''));
const parsedParams = {};
params.forEach(param => {
  const parts = param.split('=');
  parsedParams[parts[0]] = parts[1];
});

输出{ foo: "bar", moo: "var" }

有没有更好或更标准的方式来处理 VueRouter 中的片段参数?如果没有,在 Vue 之外是否有标准的解决方案?

【问题讨论】:

标签: vue.js oauth-2.0 gitlab vue-router


【解决方案1】:

在我看来,我的代码 sn-p 是一个足够好的解决方案,尽管我期待 vue 中对 OAuth 标准的一些支持。也许我的期望太高了?

这就是我最终使用的

const parsedParams = {};
this.$route.hash.split('&')
  .map(part => part.replace(/^#/, ''))
  .forEach(param => {
    const parts = param.split('=');
    parsedParams[parts[0]] = parts[1];
  });

你也可以直接在这个循环中使用 uri 解码你的参数

    parsedParams[parts[0]] = decodeURIComponent(parts[1]);

【讨论】:

  • 谢谢,虽然我不确定在使用哈希模式和vue-router 时会产生什么影响。
  • 第三个带括号的结尾括号缺少.map(part => part.replace(/#/, ''))
  • map 调用从任何名称或值的任何位置删除散列。要删除字符串开头的哈希,请使用:this.$route.hash.replace(/^#/, "")
  • 你也想这样做:parsedParams[parts[0]] = decodeURIComponent(parts[1]);
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2017-12-25
  • 2018-08-25
  • 1970-01-01
  • 2015-11-19
相关资源
最近更新 更多