Open links in new window using AngularJS

后端 未结 7 1163
时光说笑
时光说笑 2020-11-27 04:17

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.         


        
相关标签:
7条回答
  • 2020-11-27 04:40

    you can use:

    $window.open(url, windowName, attributes);
    
    0 讨论(0)
  • 2020-11-27 04:42

    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');
    }
    
    });
    
    0 讨论(0)
  • 2020-11-27 04:44

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

    $window.open("somepath/", "_blank")
    
    0 讨论(0)
  • 2020-11-27 04:49

    @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();
    
      };
    });
    
    0 讨论(0)
  • 2020-11-27 04:54

    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.

    0 讨论(0)
  • 2020-11-27 04:59

    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.

    0 讨论(0)
提交回复
热议问题