我正在尝试使用$ state.go函数实现“在新标签中打开链接”功能。如果像是那样的话会很棒:
$state.go('routeHere', {
parameter1 : "parameter"
}, {
reload : true,
newtab : true // or smth like target : "_blank"
});
使用AngularJS有没有办法做到这一点?
答案 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"
这段代码解决了我的问题。
在锚标记中使用它。