2017-06-11 5 views
1

Dans mon application AngularJS SPA, j'obtiens l'URL comme http://localhost:4200/#!/ au lieu de seulement # (hash bang). Pour cette raison, le routage ne semble pas fonctionner de la manière habituelle. Je suis passé par ce stackoverflow Question mais je n'ai trouvé aucune solution. Quelqu'un connaît la solution pour se débarrasser de ce point d'exclamation supplémentaire?Routage AngularJS SPA obtenant l'URL comme "/ #!" au lieu de "#"

EDIT: Dans mon index.ejs: je <a href="#about">about</a>

Dans mon approutapp.js: je

var myapp = angular.module("myApp", ["ngRoute"]); 
 
myapp.config(function($routeProvider) { 
 
    $routeProvider 
 
    .when("/", { 
 
     templateUrl : "/static/list.ejs" 
 
    }) 
 
    .when("/about", { 
 
     templateUrl : "/static/about-us.ejs" 
 
    }) 
 

 
}); 
 

 
myapp.config(['$locationProvider', function($locationProvider) { 
 
    $locationProvider.hashPrefix(''); 
 
}]);

Mais l'URL que je reçois toujours: http://localhost:4200/#/!/

et va http://localhost:4200/about la page se bloque

+0

Oui, mais la réponse à cette question ne fonctionne pas! :( – Kshri

+0

comment ça ne marche pas? Pouvez-vous fournir un [mcve] du problème pour examen? – Claies

+0

l'url '/ # /! /' N'est pas la même chose que '/ #!'; Ceci ressemble à quelque chose sur votre serveur, non angulaire – Claies

Répondre

3

Essayez d'utiliser $locationProvider.hashPrefix('')

La raison en est:

Si le navigateur est HTML5 navigateur angularJS redirigera à #!

Sinon, il sera seulement #.

cette documentation sur $location pour en savoir plus sur ce point:

Opening a regular URL in a legacy browser -> redirects to a hashbang 

URL Opening hashbang URL in a modern browser -> rewrites to a regular URL 

mode HTML5

En mode HTML5, les accesseurs de service $location interagissent avec l'adresse URL du navigateur via l'API d'historique HTML5. Cela permet d'utiliser le chemin d'URL normal et les segments de recherche, au lieu de équivalents hashbang . Si l'API d'historique HTML5 n'est pas prise en charge par un navigateur, le service de localisation $ $ utilisera automatiquement les URL hashbang . Cela vous évite d'avoir à vous soucier de savoir si le navigateur affichant votre application prend en charge l'API d'historique ou non; le service de localisation $ utilise de manière transparente la meilleure option disponible.

Ouverture d'une URL régulière dans un navigateur héritage -> redirige vers une Hashbang URL Ouverture URL Hashbang dans un navigateur moderne -> récrit à une URL Remarque régulière que dans ce mode, AngularJS intercepte tous les liens (sous réserve de la "Règles de réécriture de liens Html" ci-dessous) et met à jour l'URL d'une manière qui n'effectue jamais un rechargement complet de la page.

0

Ce changement peut être observé dans la version angulaire> 1.6.x. Dans la version précédente, c'était comme # (hash bang) seulement. Pour obtenir l'url # seule façon, vous pouvez simplement écrire de cette façon,

appModule.config(['$locationProvider', function($locationProvider) { 
    $locationProvider.hashPrefix(''); 
}]); 

Ce changement a été introduit en version 1.6.0, que vous pouvez voir https://github.com/angular/angular.js/blob/master/CHANGELOG.md#location-due-to.

De plus, ajouter ici ce qui est écrit:

Le hachage préfixe pour $location URL hachage bang a changé de la chaîne vide « » au bang « ! ». Si votre application n'utilise pas HTML5 mode ou est en cours d'exécution sur les navigateurs qui ne prennent pas en charge HTML5 mode et que vous n'avez pas spécifié votre propre préfixe de hachage, les URL côté client contiendront désormais un "!" préfixe. Par exemple, plutôt que mydomain.com/#/a/b/c deviendra mydomain.com/#!/a/b/c.