2015-08-25 2 views
11

У меня есть приложение с общедоступной страницей и страницей администратора. Я хочу открыть страницу администрирования на новой вкладке после входа в систему. Я пробовал это, после того, как логин был успешным, но никак не повлиял. Публичная страница (где логин) просто перезагружается:AngularJs - Открыть url в новой вкладке

var url = $state.href('/admin/overview'); 
$window.open(url, '_blank'); 

Любые советы будут оценены. Спасибо.

+1

Вы можете воспроизвести ошибку в скрипку и разместить ссылку здесь? –

+0

К сожалению, нет. Я не могу точно воспроизвести код в скрипке. Это слишком сложно. – VictorB

+0

Является ли «/ admin/overview» название маршрута? потому что согласно документам вы не можете использовать этот метод с URI (http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state). Это может быть частью проблемы – Sphaso

ответ

21

Вот рабочий JSFiddle, вы должны вводить $window, прежде чем вы можете использовать его:

JS:

angular.module('myApp', []) 
    .controller('dummy', ['$scope', '$window', function ($scope, $window) { 
    $scope.redirectToGoogle = function() { 
     $window.open('https://www.google.com', '_blank'); 
    }; 
}]); 

HTML:

<div ng-app="myApp" ng-controller="dummy"> 
    <a ng-href="" ng-click="redirectToGoogle()">Hello</a> 
</div> 
+1

Это работает красиво при использовании внешнего URL-адреса (например, того, который вы предоставили), но он не работает при попытке использовать состояния маршрутизатора-ui (или URL-адреса). – VictorB

11

Вот еще один рабочий JSFiddle

HTML:

<div ng-controller="MyCtrl"> 
<a ng-href="{{url}}" target="_blank">Visit jsfiddle</a> 
</div> 

JS:

var myApp = angular.module('myApp',[]); 
function MyCtrl($scope) { 
    $scope.url ='http://jsfiddle.net/HB7LU/16771/'; 
} 
1

Вы можете иметь директиву, чтобы сделать это для вас.

directives.redirect = function ($location, $window, $rootScope) { 
 
    return { 
 

 
     link: function (scope, element, attrs) { 
 
      element.on("click", function() { 
 
       if (!attrs.newwindow || attrs.newwindow == false) { 
 
        $location.path(attrs.redirect); 
 
        scope.$apply(); 
 
       } 
 
       else { 
 
        var baseUrl = $location.$$absUrl.toString().substring(0, decodeURIComponent($location.$$absUrl).toString().indexOf($location.$$path.toString(), $location.$$absUrl.toString().indexOf("#")) + 1) + attrs.redirect; 
 
        $window.open(baseUrl); 
 
       } 
 
      }); 
 
     } 
 
    } 
 
}

И в HTML, вы можете использовать следующее, чтобы открыть в новой вкладке:

<a redirect="/admin/overview" newwindow="true">Open in new tab</a> 
+0

Здесь работает exmaple: https://jsfiddle.net/aniket_kulkarni/wdzjcgeL/ –

+0

Ваше решение помещает # в URL-адрес _blank. используйте это $ location. $$ absUrl.split ('#') [0] + attrs.redirect; – PSA

Смежные вопросы