AngularJS $ state新标签中的打开链接


81

我正在尝试使用$ state.go函数实现“在新标签页中打开链接”功能。如果有这样的东西,那就太棒了:

$state.go('routeHere', {
    parameter1 : "parameter"
    }, {
    reload : true,
    newtab : true // or smth like target : "_blank"
});

有什么办法可以使用AngularJS做到这一点?


问题中的Edit说您使用以下代码解决了该问题,似乎很多余。就是 您选择它作为可接受的答案就暗示了这一点。
亚当·泽纳

已修复,删除了编辑。
Alex Arvanitidis 2015年

Answers:


153

更新:好的,我只是使用以下代码解决了它:

var url = $state.href('myroute', {parameter: "parameter"});
window.open(url,'_blank');

18
那不是最佳实践的窗口吗?
tsuz

3
您确定参数可以传递到新窗口吗?
hjl

是的@elaijuh他们将被通过
Manuel Di Iorio

@alex我想定位已定义的窗口,所以我尝试了window.open(url,'myWindow'); 但它不起作用。有什么帮助吗?
mhd

1
请注意,如果您确实通过这种方式打开了来自javascript的链接,并且基本网址发生了变化,则浏览器很可能会阻止它说网站试图打开弹出窗口,但是如果用户接受或授权您的网站这样做,那么它将工作。
GabLeRoux

55

我只是尝试了这一点-显然,添加target="_blank"了以下内容ui-sref

<a ui-sref="routeHere" target="_blank">A Link</a>

省去了向控制器添加代码的麻烦,并且像任何普通链接一样为您提供了悬停时的URL。双赢!


3
这仅适用于<a>。“目标”显然不适用于其他元素。即<button ui-sref =“ routeHere” target =“ _ blank”> A Link </ button>
Luis

2
@Luis Buttons没有Target属性,所以是的,它不会起作用
gerl

1
@Luis也许您可以使用与按钮相关的类和角色作为锚标记的按钮,以使其看起来像按钮。例如:<a ui-sref="routeHere" target="_blank" class="btn btn-primary" role="button">A Link</a>
Safwan '18

7

我遇到了类似的问题,如果以前的答案对您没有任何帮助,请尝试此操作。

var url = '#' + $state.href('preview');
window.open(url,'_blank');

因此,基本上,在localhost中工作时,不附加'#'它只是重定向到

本地主机/预览

, 代替

本地主机/项目名称/#/预览

我这里不打算传递数据,只是在新选项卡中打开$ state。


6

如果您的应用程序位于子文件夹中,则它可能无法在localhost上运行。我实际上有同样的问题。

我已经在网上尝试过,并且可以使用以下方法按预期工作:

<a ui-sref="routeHere" target="_blank">Link</a>

4

我发现最好的答案是扩展ui.router,因为该功能不内置。您可以在这里找到完整的详细信息:

扩展Angular 1.x ui路由器的$ state.go

但是,这是我对需要完成的工作的简短说明,将其添加到app.js或angular app初始化文件中:

angular.module("AppName").config(['$provide', function ($provide) {
    $provide.decorator('$state', ['$delegate', '$window',
        function ($delegate, $window) {
            var extended = {
                goNewTab: function (stateName, params) {
                    $window.open(
                        $delegate.href(stateName, params, { absolute: true }), '_blank');
                }
            };
            angular.extend($delegate, extended);
            return $delegate;
        }]);
}]);

在你的代码中

您将可以执行以下操作:

$state.goNewTab('routeHere', { parameter1 : "parameter"});


2

试试这个!

<a ui-sref="routeHere({parameter: vm.parameter})" target="_blank"></a>


这无关紧要,我不是说我需要在调用的路由中添加参数,而是说我想在新选项卡中打开此路由。
亚历克斯·阿瓦尼迪迪斯

这可能与许多人有关。我只是用这个。这里要提到的一件事是参数名称应该用单引号引起来。<a ui-sref="routeHere({'parameter': vm.parameter})" target="_blank"> </a>
Sudheer Muhammed
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.