【问题标题】:Open links in new window using AngularJS使用 AngularJS 在新窗口中打开链接
【发布时间】:2013-12-04 16:08:26
【问题描述】:

有没有办法告诉 AngularJS 我希望在用户点击链接时在新窗口中打开它们?

使用 jQuery 我会这样做:

jQuery("a.openInNewWindow").click( function() {
    window.open(this.href);
    return false;
})

AngularJS 有没有等价物?

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    我浏览了很多链接,但这个答案对我帮助很大:

    $scope.redirectPage = function (data) { $window.open(data, "popup", "width=1000,height=700,left=300,top=200"); };

    ** 数据将是您点击的绝对网址。

    【讨论】:

      【解决方案2】:

      这是你的按钮的代码

      <a href="AddNewUserAdmin" 
         class="btn btn-info " 
         ng-click="showaddnewuserpage()">
        <span class="glyphicon glyphicon-plus-sign"></span> Add User</a>
      

      在控制器中只需添加此功能。

       var app = angular.module('userAPP', []);
      
      app.controller('useraddcontroller', function ($scope, $http, $window) {
      
      $scope.showaddnewuserpage = function () {
      
          $window.location.href = ('/AddNewUserAdmin');
      }
      
      });
      

      【讨论】:

        【解决方案3】:

        它对我有用。 将$window 服务注入您的控制器。

        $window.open("somepath/", "_blank")
        

        【讨论】:

        • 这就是我正在寻找的角度方式。 :)
        【解决方案4】:

        你可以使用:

        $window.open(url, windowName, attributes);
        

        【讨论】:

        • 虽然你像 Angular 期望的那样使用 $window,但这个答案确实不包括如何绑定,这是 ops 问题的一部分(它没有显示如何将 jQuery(..)thinking 转换为 ng.
        【解决方案5】:

        我写了一个小要点,我认为它对任何寻求解决该问题的人都非常有帮助:external link

        它的作用是将target="_blank" 属性添加到将链接到与当前域不同的域的锚元素。 您可以将其修补为您认为合适的任何内容。

        【讨论】:

          【解决方案6】:

          @m59 指令适用于 ng-bind-html,您只需等待 $viewContentLoaded 完成

          app.directive('targetBlank', function($timeout) {
            return function($scope, element) {
              $scope.initializeTarget = function() {
                return $scope.$on('$viewContentLoaded', $timeout(function() {
                  var elems;
                  elems = element.prop('tagName') === 'A' ? element : element.find('a');
                  elems.attr('target', '_blank');
                }));
              };
              return $scope.initializeTarget();
          
            };
          });
          

          【讨论】:

            【解决方案7】:

            这是一个指令,它将target="_blank" 添加到所有具有href 属性的&lt;a&gt; 标记。这意味着它们都将在新窗口中打开。请记住,指令在 Angular 中用于任何 dom 操作/行为。 Live demo (click).

            app.directive('href', function() {
              return {
                compile: function(element) {
                  element.attr('target', '_blank');
                }
              };
            });
            

            这是相同的概念,侵入性更小(因此不会影响所有链接)且适应性更强。您可以在父元素上使用它以使其影响所有子链接。 Live demo (click).

            app.directive('targetBlank', function() {
              return {
                compile: function(element) {
                  var elems = (element.prop("tagName") === 'A') ? element : element.find('a');
                  elems.attr("target", "_blank");
                }
              };
            });
            

            旧答案

            您似乎只会在您的&lt;a&gt; 标签上使用"target="_blank"。这里有两种方法:

            <a href="//facebook.com" target="_blank">Facebook</a>
            <button ng-click="foo()">Facebook</button>
            

            JavaScript:

            var app = angular.module('myApp', []);
            
            app.controller('myCtrl', function($scope, $window) {
              $scope.foo = function() {
                $window.open('//facebook.com');
              };
            });
            

            Live demo here (click).

            这是$window 的文档:http://docs.angularjs.org/api/ng.$window

            你可以只使用window,但最好使用依赖注入,传入 angular 的$window 用于测试目的。

            【讨论】:

            • 有没有办法让它在使用ng-bind-html插入的html上工作?
            • 我不确定。我的猜测是,出于安全目的,指令在 ng-bind-html 中不起作用。
            • $timeout(function() { $('.content a').attr('target', '_blank') }, 0)
            • 如果您想将其与$http 承诺联系起来?
            • @Snekse 您的问题不够具体,无法回答,但听起来您应该使用ui-router
            猜你喜欢
            • 2015-09-13
            • 2015-02-09
            • 2012-04-11
            • 1970-01-01
            • 1970-01-01
            • 2019-06-20
            • 1970-01-01
            • 1970-01-01
            • 2013-06-10
            相关资源
            最近更新 更多