2015-08-25 20 views
11

Ho un'applicazione con una pagina pubblica e una pagina di amministrazione. Vorrei aprire la pagina di amministrazione in una nuova scheda dopo l'accesso. Ho provato questo, dopo che il login ha avuto successo, ma senza alcun effetto. La pagina pubblica (dove è il login) è appena in fase di ricarica:AngularJs - Apri l'url nella nuova scheda

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

Qualsiasi consiglio sarebbe apprezzato. Grazie.

+1

Riesci a riprodurre l'errore in un violino e inserisci il link qui? –

+0

Purtroppo no. Non riesco a riprodurre accuratamente il codice in un violino. È troppo complesso – VictorB

+0

"/ admin/overview" è un nome di percorso? perché secondo i documenti non è possibile utilizzare tale metodo con gli URI (http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state). Questo potrebbe essere parte del problema – Sphaso

risposta

21

Ecco una JSFiddle di lavoro, si deve iniettare $window prima di poter utilizzare:

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

Questo funziona bene quando si utilizza un URL esterno (come quello fornito) ma non funziona quando si tenta di utilizzare gli stati (o gli URL) del router-ui. – VictorB

11

Ecco un altro lavoro 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

È possibile avere una direttiva per fare questo per voi.

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

E in HTML, è possibile utilizzare il seguente per aprire in una nuova scheda:

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

Qui sta lavorando exmaple: https://jsfiddle.net/aniket_kulkarni/wdzjcgeL/ –

+0

La tua soluzione sta mettendo # nell'URL _blank. usa $ posizione. $$ absUrl.split ('#') [0] + attrs.redirect; – PSA

Problemi correlati