使用 AngularJS 在新窗口中打开链接

IT技术 javascript angularjs
2021-01-27 19:08:12

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

使用 jQuery 我会这样做:

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

AngularJS 有等价物吗?

6个回答

这是一个将添加target="_blank"<a>具有href属性的所有标签的指令这意味着它们都将在新窗口中打开。请记住,指令在 Angular 中用于任何 dom 操作/行为。现场演示(点击)。

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

这是相同的概念,侵入性较小(因此不会影响所有链接)并且更具适应性。您可以在父元素上使用它来影响所有子链接。现场演示(点击)。

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

旧答案

看起来你只会"target="_blank"在你的<a>标签使用这里有两种方法:

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

现场演示在这里(点击)。

以下是文档$windowhttp : //docs.angularjs.org/api/ng.$window

您可以只使用window,但最好使用依赖注入,传入 angular$window以进行测试。

有没有办法让它在使用插入的html上工作ng-bind-html
2021-03-15 19:08:12
$timeout(function() { $('.content a').attr('target', '_blank') }, 0)
2021-03-19 19:08:12
我不确定。我的猜测是,出于安全目的,指令在 ng-bind-html 中不起作用。
2021-03-22 19:08:12
@Snekse 您的问题不够具体,无法回答,但听起来您应该使用它ui-router
2021-03-25 19:08:12
如果你想把它和一个$httpPromise联系起来?
2021-04-03 19:08:12

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

$window.open("somepath/", "_blank")
这就是我一直在寻找的角度方式。:)
2021-04-06 19:08:12

您可以使用:

$window.open(url, windowName, attributes);
尽管您像 angular 期望的那样使用 $window,但这个答案确实不包括如何绑定,这是 ops 问题的一部分(它没有显示如何将jQuery(..)思考转换为 ng.bin )。
2021-04-01 19:08:12

这是你的按钮的代码

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

});

@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();

  };
});