Open links in new window using AngularJS

JavascriptAngularjs

Javascript Problem Overview


Is there a way to tell AngularJS that I want links to be opened in new windows when the user clicks on them?

With jQuery I would do this:

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

Is there an equivalent with AngularJS?

Javascript Solutions


Solution 1 - Javascript

Here's a directive that will add target="_blank" to all <a> tags with an href attribute. That means they will all open in a new window. Remember that directives are used in Angular for any dom manipulation/behavior. Live demo (click).

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

Here's the same concept made less invasive (so it won't affect all links) and more adaptable. You can use it on a parent element to have it affect all children links. 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");
    }
  };
});

Old Answer
It seems like you would just use "target="_blank" on your <a> tag. Here are two ways to go:

<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).

Here are the docs for $window: http://docs.angularjs.org/api/ng.$window

You could just use window, but it is better to use dependency injection, passing in angular's $window for testing purposes.

Solution 2 - Javascript

It works for me. Inject $window service in to your controller.

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

Solution 3 - Javascript

you can use:

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

Solution 4 - Javascript

this is the code of your button

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

in the controller just add this function.

 var app = angular.module('userAPP', []);

app.controller('useraddcontroller', function ($scope, $http, $window) {

$scope.showaddnewuserpage = function () {

    $window.location.href = ('/AddNewUserAdmin');
}

});

Solution 5 - Javascript

@m59 Directives will work for ng-bind-html you just need to wait for $viewContentLoaded to finish

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

  };
});

Solution 6 - Javascript

I wrote a small gist which I think can be very helpful to anybody seeking a solution to that problem: [external link][1]

What it does is it adds target="_blank" attributes to anchor elements that would link to a domain different than the current one. You can patch it up to whatever you see fit.

[1]: https://gist.github.com/idanen/284eb2b6c7efbaecb9b7 "external link"

Solution 7 - Javascript

I have gone through many links but this answer helped me alot:

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

** data will be absolute url which you are hitting.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKevSheedyView Question on Stackoverflow
Solution 1 - Javascriptm59View Answer on Stackoverflow
Solution 2 - JavascriptFilipp GaponenkoView Answer on Stackoverflow
Solution 3 - JavascriptSamView Answer on Stackoverflow
Solution 4 - Javascriptnur faraziView Answer on Stackoverflow
Solution 5 - JavascriptAlex DaroView Answer on Stackoverflow
Solution 6 - JavascriptidanView Answer on Stackoverflow
Solution 7 - JavascriptAnujView Answer on Stackoverflow