【问题标题】:$state.go changing url having /#q=hello to /#/q=hello$state.go 将 /#q=hello 的 url 更改为 /#/q=hello
【发布时间】:2016-10-23 17:15:03
【问题描述】:


我正在开发一个 chrome 扩展,它在 google.com.au 中注入一些内容脚本。然后,该内容脚本会加载一个基于 Angular ui 路由器的应用程序,该应用程序具有一个小界面。我正在使用没有 url 的 $state。所以只有 templateUrl 和控制器。问题是当我使用 $state.go('home') 转到我的小应用程序的主页时,$state.go 在内部更改了位置或 URL,例如
(1) :- https://www.google.com.au/#q=hello

(2) :- https://www.google.com.au/#/q=hello (q后面多了一个/)

第二个网址无效,它将我重定向回 google.com.au。
此外,值得一提的是 - 当我将同一个应用程序注入到链接的搜索结果页面中时,该应用程序运行良好,其 url 中没有任何 #

另外,我尝试了$state.go$state.transitionTo 之类的变体,第三个参数为{location:false ....}。但它仍然会像上面一样更改网址。

我被卡住了,无法继续前进。
这是问题的截屏视频。
http://screencast.com/t/ZrBtlkU3z
任何帮助将不胜感激。
提前致谢。

更新
这是一个包含上述问题的示例 chrome 扩展。 https://Vikasg7@bitbucket.org/Vikasg7/example-app.git
请将此作为解压扩展加载并尝试转到
https://www.google.com.au/#q=hello
在加载扩展之前和之后看看我上面提到的问题。

希望这可以帮助您专家解决问题。

【问题讨论】:

    标签: javascript angularjs angular-ui-router


    【解决方案1】:

    我认为这是 ui-router 的预期行为。您可能需要为此使用本机 javascript (window.location.href = 'XXX') 或 $location 来完全按照您的意愿设置 hashbang。

    【讨论】:

    • 我们可以关闭这个预期的行为吗?
    【解决方案2】:

    好的,经过这么多的研究、打击和试验。 这是更改状态时不会更改 url 的代码。 我不得不使用 html5Mode。可以在此处找到更详细的信息和用法。
    https://docs.angularjs.org/guide/$location#html-link-rewriting
    stackoverflow 帖子
    AngularJS 1.1.5 - automatically adding hash tag to URLs

    angular
      .module("app", ["ui.router", "app.services", "app.directives", "app.controllers"])
      .config(["$stateProvider", "$locationProvider", function ($stateProvider, $locationProvider) {
        $locationProvider.html5Mode({
          enabled: true,
          requireBase: false,
          rewriteLinks: true
        }).hashPrefix("!")
      }])
    

    希望这会有所帮助,有人在那里!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多