在新窗口/选项卡中使用锚点(#)打开URL(使用angular-ui路由器的angularjs)

时间:2018-03-21 18:30:14

标签: angularjs angular-ui-router

我有一个指向另一个使用ui-sref锚点的页面的链接:

`<a ui-sref="details({'id': '12345', '#': 'parts'})" target="_blank">
    to parts
</a>`

当链接在同一个窗口中打开时(没有target="_blank"),它可以完美地工作,因此stateProvider可以正确处理它。 但是当在新窗口(target="_blank")中打开时,会忽略锚标记。页面在底部打开,好像锚点不在那里 - 页面不会滚动到片段标识符指定的片段

我可以配置我的状态,以便正确处理带有锚点的URL吗?类似的东西:

function runsConfig($stateProvider) {
    $stateProvider
    .state('details', {
        url: '/details?id?#parts', // <-- add the anchor in the url definition? 
        ...
    })

但这不起作用......我觉得以前已经解决了这个问题,但我似乎无法找到如何做到的暗示。

修改

正如@georgeawg和@ Jonathan-Brizio建议的那样(谢谢!!!)我必须在合适的时间自己触发scoll事件,这可能是由于某些嵌入式组件需要一段时间来渲染。为什么它在同一个标​​签页面中打开页面时才有效。

这就是诀窍:

vm.$onInit = function()
{
    $timeout($anchorScroll); 
};

由于缺少等待时间参数,$ anchorScroll会在呈现组件时立即执行($postLink()仍然太早)。

再次感谢@georgeawg和@ Jonathan-Brizio的帮助

0 个答案:

没有答案