AngularJS ui-router: ui-sref 链接在填充 href 值时不在哈希之前
AngularJS ui-router: ui-sref links aren't prepending the hash when filling in href values
我的 ui-路由器状态提供程序设置如下:
.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
我在该页面上有一个 link,如下所示:
<a ui-sref="events.eventDetails">event details</a>
当我正常单击 link 时, 它正常工作 并将我引导至包含 URL:
的页面
https://baseUrl.com/home#/events/details
但是当我尝试在新选项卡中打开相同的 link 时(或者当我右键单击并复制 "href" link 地址时),它是不正确的:
https://baseUrl.com/events/details
所以问题是:为什么ui-sref填错了href价值?为什么它在生成的 URL 中完全缺少 # 散列? (是的,我已经尝试了 enabling/disabled $locationProvider.html5mode 并且对此没有任何影响。)
我将此添加到我的主要 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;
}
}
}
])
我的 ui-路由器状态提供程序设置如下:
.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
我在该页面上有一个 link,如下所示:
<a ui-sref="events.eventDetails">event details</a>
当我正常单击 link 时, 它正常工作 并将我引导至包含 URL:
的页面https://baseUrl.com/home#/events/details
但是当我尝试在新选项卡中打开相同的 link 时(或者当我右键单击并复制 "href" link 地址时),它是不正确的:
https://baseUrl.com/events/details
所以问题是:为什么ui-sref填错了href价值?为什么它在生成的 URL 中完全缺少 # 散列? (是的,我已经尝试了 enabling/disabled $locationProvider.html5mode 并且对此没有任何影响。)
我将此添加到我的主要 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;
}
}
}
])