【问题标题】:Angularjs $state open link in new tabAngularjs $state 在新选项卡中打开链接
【发布时间】:2014-06-24 08:11:22
【问题描述】:

我正在尝试使用 $state.go 函数实现“在新选项卡中打开链接”功能。如果有类似的东西那就太棒了:

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

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

【问题讨论】:

  • 问题中的编辑说您使用以下代码解决了它似乎是多余的。 IE。您选择它作为您接受的答案这一事实暗示了这一点。
  • 已修复,删除了编辑。
  • 你可以在这里找到答案Angularjs $state open link in new tab

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


【解决方案1】:

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

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

【讨论】:

  • 不应该是 $window 的最佳实践吗?
  • 你确定参数可以传到新窗口吗?
  • 是的@elaijuh 他们会被通过
  • @alex 我想定位一个定义的窗口,所以我尝试了 window.open(url,'myWindow');但它不起作用。有什么帮助吗?
  • 请注意,如果您确实以这种方式从 javascript 打开链接并且基本 url 发生更改,则浏览器可能会阻止它说该站点试图打开一个弹出窗口,但如果用户接受或授权您的网站这样做,然后它会工作。
【解决方案2】:

我刚刚尝试过——显然,添加 target="_blank"ui-sref 一起使用:

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

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

【讨论】:

  • @Luis 按钮没有 Target 属性所以是的,它不会工作
  • @Luis 也许你可以使用按钮相关的类和角色作为锚标签的按钮,让它看起来像一个按钮。例如:&lt;a ui-sref="routeHere" target="_blank" class="btn btn-primary" role="button"&gt;A Link&lt;/a&gt;
【解决方案3】:

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

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

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

本地主机/预览

,而不是

localhost/Project_Name/#/预览

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

【讨论】:

    【解决方案4】:

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

    我已经在网上尝试过,通过使用它可以按预期工作:

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

    【讨论】:

      【解决方案5】:
      ui-sref="routeHere" href=""target="_blank"
      

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

      在锚标记中使用它。

      【讨论】:

        【解决方案6】:

        我找到的最佳答案是扩展 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"});
        

        【讨论】:

          【解决方案7】:

          试试这个!

          &lt;a ui-sref="routeHere({parameter: vm.parameter})" target="_blank"&gt;&lt;/a&gt;

          【讨论】:

          • 这个无关紧要,我不是说要给我调用的路由加参数,我说要在新标签页打开这条路由。
          • 这可能与许多人有关。我刚用这个。这里要提到的一件事是参数名称应该用单引号引起来。
          猜你喜欢
          • 1970-01-01
          • 2012-04-25
          • 1970-01-01
          • 1970-01-01
          • 2015-11-28
          • 2012-05-03
          • 2015-07-24
          • 2018-11-22
          • 1970-01-01
          相关资源
          最近更新 更多