J'ai le contrôleur 'reportCtrl'
et le HTML qui représente 6 tables avec des données et seulement plusieurs lignes que je montre à la fois.
app.js
var appReport = angular.module('myAppReport', []);
appReport.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/showreport', {templateUrl: 'app/reports/reportsView.html', controller: 'reportCtrl'});
$routeProvider.when('/showreport/:type', {templateUrl: 'app/reports/reportsView.html', controller: 'reportCtrl'});
Chaque table a un bouton qui, au clic, devrait ouvrir un nouvel onglet dans le navigateur avec la table étendue:
scope.onClick = function(path){
var real_path = $location.path() + '/' + path + '/';
$location.path( real_path );
// $window.open($location.path()); // doesn't work
};
Par exemple, j'ai l'URL de la vue racine:
http://dev.test.com/reports/date/#/showreport
Maintenant, après avoir appuyé sur le bouton, je veux créer:
http://dev.test.com/reports/date/#/showreport/table_name
et ouvrez-le dans un nouvel onglet. Comme vous le voyez, j'ai essayé $window.open($location.path());
mais cela ne fonctionne pas, rien ne se passe.
Merci,
Vous ouvrez une nouvelle fenêtre en utilisant une autre fonction qui pourrait confondre Angular.
Essayez de passer la chaîne dans $window.open(real_path)
où real_path est une chaîne contenant le chemin que vous souhaitez parcourir.
Si vous voulez ouvrir une page angulaire dans un nouvel onglet avec ctrl + clic ou dans le même onglet, essayez ceci: -
HTML:
<a ng-click="navigationUrl($event)">My Link</a>
JS:
var navigationUrl = function (event) {
if (event.ctrlKey) {
window.open(url, '_blank'); // in new tab
} else {
$location.path(url); // in same tab
}
};
Une autre option consiste à utiliser ng-href
HTML:
<a ng-href="#/courses/{{employee.courseId}}/employees/{{employee.id}}"
target="_blank"> {{employee.employeeNumber}}
</a>
Où l'URL est basé sur l'endroit où vous souhaitez rediriger
Pour ouvrir une nouvelle vue dans une nouvelle fenêtre, exécutez le code suivant:
window.open($location.$$absUrl.replace($location.$$path,NEW_PATH), '_blank');
Bien que la réponse la plus votée ici puisse fonctionner pour la plupart des scénarios, je souhaite ajouter la façon dont j'ai trouvé comment atteindre l'objectif souhaité par OP (j'avais également besoin de cela):
var viewPath = '/InsideMyView';
var currentPath = window.location.href.substr(0, window.location.href.indexOf('#') + 1);
var fullPath = currentPath + viewPath;
$window.open(fullPath, '_blank');
Explication : Il vous suffit d'obtenir l'URL racine de votre application. Vous pouvez utiliser #
dans l'URL (ajoutée par un angle), puis concaténer le chemin d'accès à la vue pour obtenir l'URL complète.
Ouverture de la vue dans un nouvel onglet avec paramètre angulaire
<a target="_blank" class="btn" data-ng-href="@Url.Action("Hotel", "Home")?hotelCode={{hotel.code}}"> Click Hear</a>
Cela a fonctionné pour moi.
HTML: <div ng-click="OpenBrowserInNewTab(someKeyValue)"</div>Click Me </div>
Le controlle:
`$scope.OpenBrowserInNewTab = (someKeyValue) ->
tabWindowId = window.open('/abcdef/ghijk/' + someKeyValue + '', _blank')
$http.post("/abcdef/ghijk/#someKeyValue", data).then (response) ->
tabWindowId.location.href = response.headers('Location')
return
return`