AngularJS ui-router:在填充href值时,ui-sref链接没有添加哈希。

4

我的ui-router状态提供程序设置如下:

.state(
    'events', {
        url: '/events',
        templateUrl: ...,
        controller: ...
    })
.state(
    'events.listEvents', {
        url: '/list',
        templateUrl: ...,
        controller: ...
    })
.state(
    'events.eventDetails', {
        url: '/details',
        templateUrl: ...,
        controller: ...
    })

我开始于events.listEvents状态,因此我的URL看起来像这样:

https://baseUrl.com/home#/events/list

我在页面上放了一个链接,类似这样:

<a ui-sref="events.eventDetails">event details</a>

当我正常点击链接时,它能够正确地运作并将我引导到一个具有以下URL的页面:
https://baseUrl.com/home#/events/details

但是,当我尝试在新标签页中打开相同的链接(或右键单击并复制“href”链接地址)时,它是不正确的:

https://baseUrl.com/events/details

所以问题是:为什么ui-sref填写了错误的href值?它为什么在生成的URL中完全省略#哈希符号?(是的,我已经尝试启用/禁用$locationProvider.html5mode,但对此没有任何影响。)

为什么在“events.listEvents” URL 中会出现“/home?user=jeff”? - tommyd456
这段代码仅仅是为了说明应用程序有一个基础URL(在此例中为“/home”),无论ui-router状态如何更改,它都保持不变。当您在各种状态之间切换时,“/home”保持不变,只有#号后面的内容发生变化。如果您愿意,可以忽略“?user=jeff” - 它是基础URL的一部分,因此在您浏览应用程序时保持不变。 - Dasmowenator
编辑:我清理了我的示例URL,使其更易于阅读 - Dasmowenator
我曾经遇到过这个问题,但是升级ui-router后问题得到了解决,所以我猜测这是一个已经被修复的bug。 - Wossname
1个回答

4

我添加了以下代码到我的主要app.js文件中,作为一个解决方案:

.run(['$state',
    function($state) {
        $state.originalHrefFunction = $state.href;
        $state.href = function href(stateOrName, params, options) {
            var result = $state.originalHrefFunction(stateOrName, params, options);
            if (result && result.slice(0, 1) === '/') {
                return '#' + result;
            } else {
                return result;
            }
        }
    }
])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接