Y a-t-il un moyen de dire à AngularJS que je veux que les liens soient ouverts dans de nouvelles fenêtres lorsque l'utilisateur clique dessus?
Avec jQuery je ferais ceci:
jQuery("a.openInNewWindow").click( function() {
window.open(this.href);
return false;
})
Existe-t-il un équivalent avec AngularJS?
Voici une directive qui ajoutera target="_blank"
à toutes les balises <a>
avec un attribut href
. Cela signifie qu'ils s'ouvriront tous dans une nouvelle fenêtre. Rappelez-vous que les directives sont utilisées dans Angular pour toute manipulation/comportement de dom. Démo en direct (clic).
app.directive('href', function() {
return {
compile: function(element) {
element.attr('target', '_blank');
}
};
});
Voici le même concept rendu moins invasif (pour ne pas affecter tous les liens) et plus adaptable. Vous pouvez l'utiliser sur un élément parent pour qu'il affecte tous les liens enfants. Démo en direct (clic).
app.directive('targetBlank', function() {
return {
compile: function(element) {
var elems = (element.prop("tagName") === 'A') ? element : element.find('a');
elems.attr("target", "_blank");
}
};
});
Il semble que vous utiliseriez simplement "target="_blank"
sur votre balise <a>
. Voici deux façons de faire:
<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');
};
});
Voici la documentation pour $window
: http://docs.angularjs.org/api/ng.$window
Vous pouvez simplement utiliser window
, mais il est préférable d'utiliser l'injection de dépendances en transmettant $window
de Angular à des fins de test.
Ça marche pour moi. Injectez le service $window
dans votre contrôleur.
$window.open("somepath/", "_blank")
vous pouvez utiliser:
$window.open(url, windowName, attributes);
c'est le code de votre bouton
<a href="AddNewUserAdmin"
class="btn btn-info "
ng-click="showaddnewuserpage()">
<span class="glyphicon glyphicon-plus-sign"></span> Add User</a>
dans le contrôleur, ajoutez simplement cette fonction.
var app = angular.module('userAPP', []);
app.controller('useraddcontroller', function ($scope, $http, $window) {
$scope.showaddnewuserpage = function () {
$window.location.href = ('/AddNewUserAdmin');
}
});
Les directives @ m59 fonctionneront pour ng-bind-html il vous suffit d'attendre que $viewContentLoaded
se 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();
};
});
J'ai écrit un petit résumé qui, selon moi, peut être très utile pour quiconque cherche une solution à ce problème: lien externe
Cela ajoute les attributs target="_blank"
aux éléments d'ancrage qui seraient liés à un domaine différent de celui en cours. Vous pouvez le modifier comme bon vous semble.
J'ai parcouru de nombreux liens, mais cette réponse m'a beaucoup aidé:
$scope.redirectPage = function (data) { $window.open(data, "popup", "width=1000,height=700,left=300,top=200"); };
** les données seront l'URL absolue que vous frappez.