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 并且对此没有任何影响。)

4

1 回答 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;
            }
        }
    }
])
于 2016-01-13T19:47:44.113 回答