带有absolute:true的$ state.href不会返回正确的URL

时间:2016-04-19 06:27:58

标签: angularjs

我正在使用Angular和UI路由器。我试图获取用户可以复制和共享的页面上显示的链接。 This thread告诉我$state.href是我正在寻找的功能,但它并没有生成正确的链接。

这里的一个重要细节是我的应用程序的根不是域的根。在这种情况下,域名为localhost,但角度应用的根目录位于localhost/dev/app/

这是我在控制器内部使用的命令。

$scope.url = $state.href('survey', { survey: "asd" }, {absolute: true});

在我的app.js中,声明了以下路由:

.state('survey', {
    url: "/:survey/survey?ao",
    templateUrl: "views/survey/survey.html",
    controller: "surveyController",
    },
    data: { 
        requireLogin: false,
        requireAdmin: false
    }})

这应返回http://localhost/dev/app/#/asd/survey,而是返回http://localhost/#/asd/survey

(值得注意的是,ui-sref="survey({survey: "asd"})确实会转换为正确的链接。)

有没有办法解决这个问题,所以我得到了完整的网址?

2 个答案:

答案 0 :(得分:3)

在我的应用页面添加base标记为我解决了这个问题。它定义了具有路由器引用的页面的基本URL。出于传统支持的原因,我在Angular UI路由器的0.2.15版本上。我不知道这对于更新版本是否仍然是必要的。

<base href="http://localhost/dev/app/" />

答案 1 :(得分:0)

.state('survey', {
  url: "/:survey/survey?ao",
  templateUrl: "views/survey/survey.html",
  controller: "surveyController",
  data: { 
    requireLogin: false,
    requireAdmin: false
  }
})

你有一个额外的&#39;},&#39;在控制器之后,也许那是弄乱的事情?此外,如果您传递参数,您可能希望将其包含在参数行中:

params: {
  survey: null
}

此外,如果您想要网址http://localhost/dev/app/#/asd/survey,您的网址应为:

url: "dev/app/:survey/asd/survey"