【问题标题】:Angular UI-Router - How do I parse hash params?Angular UI-Router - 如何解析哈希参数?
【发布时间】:2023-03-23 06:10:01
【问题描述】:

如何获取网址中“#”号后的值?

我正在使用 Facebook 手动构建登录流程,它会将我重定向到如下所示的网址:

http://example.com/redirect#access_token=1234567890&expires_in=12345

我在 UI Router 中的路由如下所示:

  .state('redirect', {
    url     : '/redirect?token',
    templateUrl : '/html/redirect.html'
  })

现在我可以调用$location.hash() 并获取一个字符串来解析为值。但是这种方法感觉很hacky。我错过了什么吗?有没有更好的方法从这个 URL 中获取哈希参数?

编辑: 需要明确的是,Facebook 正在将“#”添加到网址中。我不知道他们为什么不只是使用“?”因为获取查询参数很简单。

【问题讨论】:

  • 试试 $location.search()。
  • 这在“#”之后似乎不起作用,就像在“?”之后起作用一样
  • 请看这个SO question的答案。他正在使用resolve 将位置# 更改为?。那应该可以。
  • @AWolf 谢谢!我认为米洛斯在下面提出了这个建议,我可能会接受它作为正确答案

标签: angularjs facebook-graph-api angular-ui-router


【解决方案1】:

使用这个配置,这将把这个参数暴露给 $stateParams(如果它们被设置的话)。如果 $location.search() 本身受 ui-router 支持,则不要使用它。

/redirect?token&expires_in

然后内部状态(可以内部解析)

.state('facebookCallback',{
  controller : 'ctrl',
  resolve :
   url : function($location) {
    return $location.url().replace("#","?")
   }
  }
 });

【讨论】:

  • 我试过了。在“#”之后它似乎不起作用。似乎哈希参数与查询参数不同。
  • 你有错误的重定向网址应该是http://example.com/#/redirect?access_token=1234567890&expires_in=12345
  • 我没有进行重定向。 Facebook 是在 url 中加入“#”的。我希望 access_token 作为查询参数传递。不知道为什么不是。
  • 不,我使用的是 HTML5 模式,我的原始网址中没有散列
  • 所以我会将 facebook 定向到特殊的 url example.com/facebook,所以他会推送 example.com/facebook#params,然后你可以尝试将此 url 重写为 index.html/redirect?params
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 2013-10-01
  • 2015-07-05
  • 1970-01-01
相关资源
最近更新 更多