Angularjs $在新标签页中打开链接

时间:2014-05-07 11:14:55

标签: angularjs angular-ui-router angular-ui

我正在尝试使用$ state.go函数实现“在新标签中打开链接”功能。如果像是那样的话会很棒:

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

使用AngularJS有没有办法做到这一点?

7 个答案:

答案 0 :(得分:137)

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

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

答案 1 :(得分:54)

我刚尝试了这一点 - 显然,添加target="_blank"适用于ui-sref

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

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

答案 2 :(得分:6)

如果您的应用位于子文件夹中,它可能无法在localhost上运行。 事实上,我遇到了同样的问题。

我已经尝试过在线使用以下功能:

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

答案 3 :(得分:5)

我有类似的问题,如果以前的答案中没有任何内容适合您,请尝试此操作。

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

所以基本上在localhost中工作时,没有附加 '#' ,只是重定向到

  

本地主机/预览

,而不是

  

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

我没有在这里传递数据,只是在新标签中打开$ state。

答案 4 :(得分:4)

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

Extending the Angular 1.x ui-router's $state.go

但是,这是我的简短说明,将其添加到app.js或angular应用初始化文件中:

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"});

答案 5 :(得分:2)

试试这个!

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

答案 6 :(得分:2)

ui-sref="routeHere" href=""target="_blank"

这段代码解决了我的问题。

在锚标记中使用它。