Est-il possible de supprimer le symbole # des URL angular.js?
Je veux toujours pouvoir utiliser le bouton de retour du navigateur, etc., lorsque je change la vue et met à jour l'URL avec des paramètres, mais je ne veux pas le symbole #.
Le tutoriel routeProvider est déclaré comme suit:
angular.module('phonecat', []).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/phones', {templateUrl: 'partials/phone-list.html', controller: PhoneListCtrl}).
when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: PhoneDetailCtrl}).
otherwise({redirectTo: '/phones'});
}]);
Puis-je modifier cela pour avoir les mêmes fonctionnalités sans le #?
Réponses:
Oui, vous devez configurer
$locationProvider
et définirhtml5Mode
surtrue
:la source
html5Mode(true)
. Dans IE, vous devez utiliser#
dans les itinéraires.IE lt 10
signifie Internet Explorer moins que la version 10$locationProvider.html5Mode(true);
dansif !(IE lt 10)
?Assurez-vous de vérifier la prise en charge du navigateur pour l'API d'historique html5:
la source
If the HTML5 History API is not supported by a browser, the $location service will fall back to using the hashbang URLs automatically
Pour supprimer la balise Hash pour une jolie URL et aussi pour que votre code fonctionne après la minification, vous devez structurer votre code comme dans l'exemple ci-dessous:
la source
requireBase: false
+1$locationProvider.html5Mode
code, mon code a$urlRouterProvider.otherwise('/home');
cessé de fonctionner.J'écris une règle dans web.config après l'avoir
$locationProvider.html5Mode(true)
installéeapp.js
.Hope, aide quelqu'un.
Dans mon index.html, j'ai ajouté ceci à
<head>
N'oubliez pas d'installer le réécriteur d'URL pour iis sur le serveur.
De plus, si vous utilisez Web Api et IIS, cette URL de correspondance ne fonctionnera pas, car elle modifiera vos appels API. Donc, ajoutez une troisième entrée (troisième ligne de condition) et donnez un modèle qui exclura les appels de
www.yourdomain.com/api
la source
Si vous êtes dans la pile .NET avec MVC avec AngularJS, voici ce que vous devez faire pour supprimer le '#' de l'URL:
Configurez votre href de base dans votre page _Layout:
<head> <base href="https://stackoverflow.com/"> </head>
Ensuite, ajoutez ce qui suit dans la configuration de votre application angulaire:
$locationProvider.html5Mode(true)
Ci-dessus supprimera «#» de l'url mais l'actualisation de la page ne fonctionnera pas. Par exemple, si vous êtes dans la page «yoursite.com/about», la recréation de la page vous donnera un 404. Ceci est dû au fait que MVC ne connaît pas le routage angulaire et par modèle MVC il recherchera une page MVC pour «à propos» qui n'existe pas dans le chemin de routage MVC. La solution de contournement consiste à envoyer toutes les demandes de page MVC à une seule vue MVC et vous pouvez le faire en ajoutant un itinéraire qui les capture tous.
url:
la source
Vous pouvez modifier le mode html5 mais cela ne fonctionne que pour les liens inclus dans les ancres html de votre page et à quoi ressemble l'url dans la barre d'adresse du navigateur. Tenter de demander une sous-page sans le hashtag (avec ou sans html5mode) de n'importe où en dehors de la page entraînera une erreur 404. Par exemple, la demande CURL suivante entraînera une erreur de page non trouvée, indépendamment de html5mode:
bien que ce qui suit renverra la page racine / page d'accueil:
La raison en est que tout ce qui se trouve après le hashtag est supprimé avant que la demande n'arrive sur le serveur. Ainsi, une demande de
http://foo.bar/#/portfolio
arrive sur le serveur comme une demande dehttp://foo.bar
. Le serveur répondra par une réponse 200 OK (vraisemblablement)http://foo.bar
et l'agent / client traitera le reste.Donc, dans les cas où vous souhaitez partager une URL avec d'autres, vous n'avez pas d'autre choix que d'inclure le hashtag.
la source
Suivez 2 étapes -
1. Définissez d' abord $ locationProvider.html5Mode (true) dans le fichier de configuration de votre application.
Par exemple -
angular.module('test', ['ui.router']) .config(function($stateProvider, $urlRouterProvider, $locationProvider) { $locationProvider.html5Mode(true); $urlRouterProvider.otherwise('/'); });
2.Deuxièmement, définissez la <base> dans votre page principale.
Par exemple ->
<base href="https://stackoverflow.com/">
Le service $ location reprendra automatiquement la méthode de la partie de hachage pour les navigateurs qui ne prennent pas en charge l'API HTML5 History.
la source
Ma solution est de créer .htaccess et d'utiliser le code #Sorian .. sans .htaccess, je n'ai pas réussi à supprimer #
la source
Selon la documentation. Vous pouvez utiliser:
Par exemple: si vous cliquez sur:
<a href="https://stackoverflow.com/other">Some URL</a>
Dans le navigateur HTML5 : angular redirigera automatiquement vers
example.com/other
Dans le navigateur non HTML5 : angular redirigera automatiquement vers
example.com/#!/other
la source
Cette réponse suppose que vous utilisez nginx comme proxy inverse et que vous avez déjà défini $ locationProvider.html5mode sur true.
-> Pour les personnes qui pourraient encore avoir du mal avec tout ce qui est cool ci-dessus.
Certes, la solution @maxim grach fonctionne très bien, mais pour la solution pour répondre aux demandes qui ne veulent pas que le hashtag soit inclus en premier lieu, ce qui peut être fait est de vérifier si php envoie 404, puis de réécrire l'URL. Voici le code pour nginx,
Dans l'emplacement php, détectez l'erreur 404 php et redirigez-le vers un autre emplacement,
Réécrivez ensuite l'URL dans l'emplacement de redirection et proxy_passez les données, bien sûr, mettez l'URL de votre site Web à la place de l'URL de mon blog. (Demande: ne questionnez cela qu'après l'avoir essayé)
Et voyez la magie.
Et ça marche vraiment, du moins pour moi.
la source
Commencez à partir de index.html supprimez tout
#
de<a href="#/aboutus">About Us</a>
sorte qu'il doit ressembler à<a href="https://stackoverflow.com/aboutus">About Us</a>
.Now dans la balise head de index.html écrivez<base href="https://stackoverflow.com/">
juste après la dernière balise meta .Maintenant, dans votre routage, injectez
$locationProvider
et écrivez$locatonProvider.html5Mode(true);
quelque chose comme ça: -Pour plus de détails, regardez cette vidéo https://www.youtube.com/watch?v=XsRugDQaGOo
la source
Je suppose que c'est vraiment tard pour ça. Mais l'ajout de la configuration ci-dessous aux importations app.module fait le travail:
la source
Étape 1: injectez le service $ locationProvider dans le constructeur de la configuration de l'application
Étape 2: Ajoutez la ligne de code $ locationProvider.html5Mode (true) au constructeur de la configuration de l'application.
Étape 3: dans la page du conteneur (landing, master ou layout), ajoutez une balise html telle qu'à l'
<base href="https://stackoverflow.com/">
intérieur de la balise.Étape 4: supprimez tous les '# "pour le routage de la configuration de toutes les balises d'ancrage. Par exemple, href =" # home "devient href =" home "; href =" # about "devient herf =" about "; href =" # contact "devient href =" contact "
la source
Il suffit d' ajouter
$locationProvider
danspuis ajouter
$locationProvider.hashPrefix('');
aprèsC'est tout.
la source