Abrir links em nova janela usando o AngularJS

Existe uma maneira de dizer ao AngularJS que eu quero que os links sejam abertos em novas janelas quando o usuário clica neles?

Com jQuery eu faria isso:

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

Existe um equivalente com o AngularJS?

Aqui está uma diretiva que adicionará target="_blank" a todas as tags com um atributo href . Isso significa que todos eles serão abertos em uma nova janela. Lembre-se de que as diretivas são usadas no Angular para qualquer manipulação / comportamento dom. Demonstração ao vivo (clique).

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

Aqui está o mesmo conceito menos invasivo (não afetará todos os links) e mais adaptável. Você pode usá-lo em um elemento pai para que ele afete todos os links filhos. Demonstração ao vivo (clique).

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

Resposta antiga

Parece que você usaria apenas "target="_blank" em sua tag . Aqui estão dois caminhos a seguir:

 Facebook  

JavaScript:

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

Demonstração ao vivo aqui (clique).

Aqui estão os documentos para $window : http://docs.angularjs.org/api/ng.$window

Você poderia apenas usar a window , mas é melhor usar a injeção de dependência, passando na $window do angular para fins de teste.

Funciona para mim. Injetar $window serviço de $window em seu controlador.

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

você pode usar:

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

este é o código do seu botão

   Add User 

no controlador basta adicionar essa function.

  var app = angular.module('userAPP', []); app.controller('useraddcontroller', function ($scope, $http, $window) { $scope.showaddnewuserpage = function () { $window.location.href = ('/https://stackoverflow.com/questions/20099784/open-links-in-new-window-using-angularjs/AddNewUserAdmin'); } }); 

@ m59 Directives funcionará para ng-bind-html você só precisa esperar que $viewContentLoaded termine

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

Eu escrevi uma pequena essência que eu acho que pode ser muito útil para qualquer um que procura uma solução para esse problema: external link

O que ele faz é adicionar atributos target="_blank" para ancorar elementos que se vinculam a um domínio diferente do atual. Você pode consertar tudo o que achar melhor.

Eu passei por muitos links, mas esta resposta me ajudou muito:

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

** os dados serão o URL absoluto que você está atingindo.