¿Es posible eliminar el símbolo # de las URL de angular.js?
Todavía quiero poder usar el botón de retroceso del navegador, etc., cuando cambio la vista y actualice la URL con parámetros, pero no quiero el símbolo #.
El tutorial routeProvider se declara de la siguiente manera:
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'});
}]);
¿Puedo editar esto para tener la misma funcionalidad sin el #?
Respuestas:
Sí, debe configurar
$locationProvider
y configurarhtml5Mode
atrue
:fuente
html5Mode(true)
. En IE tienes que usar#
en rutas.IE lt 10
significa Internet Explorer menos que la versión 10$locationProvider.html5Mode(true);
enif !(IE lt 10)
?Asegúrese de consultar el soporte del navegador para la API de historial html5:
fuente
If the HTML5 History API is not supported by a browser, the $location service will fall back to using the hashbang URLs automatically
Para eliminar la etiqueta Hash para una URL bonita y también para que su código funcione después de la minificación , debe estructurar su código como en el siguiente ejemplo:
fuente
requireBase: false
+1$locationProvider.html5Mode
código, mi código$urlRouterProvider.otherwise('/home');
dejó de funcionar.Escribo una regla en web.config después de que
$locationProvider.html5Mode(true)
se estableceapp.js
.Esperanza, ayuda a alguien.
En mi index.html agregué esto a
<head>
No olvide instalar url rewriter para iis en el servidor.
Además, si usa Web Api e IIS, esta url de coincidencia no funcionará, ya que cambiará sus llamadas de API. Por lo tanto, agregue la tercera entrada (tercera línea de condición) y proporcione un patrón que excluya las llamadas de
www.yourdomain.com/api
fuente
Si está en .NET stack con MVC con AngularJS, esto es lo que debe hacer para eliminar el '#' de la URL:
Configure su href base en su página _Diseño:
<head> <base href="https://stackoverflow.com/"> </head>
Luego, agregue lo siguiente en la configuración angular de su aplicación:
$locationProvider.html5Mode(true)
Lo anterior eliminará '#' de la URL, pero la actualización de la página no funcionará, por ejemplo, si está en "yoursite.com/about", la actualización de la página le dará un 404. Esto se debe a que MVC no sabe sobre el enrutamiento angular y por el patrón MVC buscará una página MVC para "acerca de" que no existe en la ruta de enrutamiento MVC. La solución para esto es enviar todas las solicitudes de página MVC a una sola vista MVC y puede hacerlo agregando una ruta que capture todo
url:
fuente
Puede ajustar el modo html5 pero eso solo es funcional para los enlaces incluidos en los anclajes html de su página y cómo se ve la url en la barra de direcciones del navegador. Intentar solicitar una subpágina sin el hashtag (con o sin html5mode) desde cualquier lugar fuera de la página dará como resultado un error 404. Por ejemplo, la siguiente solicitud CURL dará como resultado un error de página no encontrada, independientemente de html5mode:
aunque lo siguiente devolverá la raíz / página de inicio:
La razón de esto es que cualquier cosa después de quitar el hashtag antes de que la solicitud llegue al servidor. Entonces, una solicitud de
http://foo.bar/#/portfolio
llega al servidor como una solicitud dehttp://foo.bar
. El servidor responderá con una respuesta de 200 OK (presumiblemente)http://foo.bar
y el agente / cliente procesará el resto.Entonces, en los casos en que desea compartir una URL con otros, no tiene más opción que incluir el hashtag.
fuente
Siga 2 pasos:
1. Primero configure $ locationProvider.html5Mode (verdadero) en el archivo de configuración de su aplicación.
Por ej.
angular.module('test', ['ui.router']) .config(function($stateProvider, $urlRouterProvider, $locationProvider) { $locationProvider.html5Mode(true); $urlRouterProvider.otherwise('/'); });
2. Segundo configure la <base> dentro de su página principal.
Por ej. ->
<base href="https://stackoverflow.com/">
El servicio $ location recurrirá automáticamente al método de parte hash para los navegadores que no admiten la API de historial HTML5.
fuente
Mi solución es crear .htaccess y usar el código #Sorian ... sin .htaccess no pude eliminar #
fuente
De acuerdo con la documentación. Puedes usar:
Por ejemplo: si hace clic en:
<a href="https://stackoverflow.com/other">Some URL</a>
En el navegador HTML5 : angular redirigirá automáticamente a
example.com/other
En el navegador no HTML5 : angular redirigirá automáticamente a
example.com/#!/other
fuente
Esta respuesta supone que está utilizando nginx como proxy inverso y que ya configuró $ locationProvider.html5mode en verdadero.
-> Para las personas que aún podrían estar luchando con todas las cosas interesantes anteriores.
Seguramente, la solución @maxim grach funciona bien, pero para la solución de cómo responder a las solicitudes que no quieren que se incluya el hashtag en primer lugar, lo que se puede hacer es verificar si php está enviando 404 y luego reescribir la url. El siguiente es el código para nginx,
En la ubicación php, detecta el error 404 php y redirige a otra ubicación,
Luego, reescriba la URL en la ubicación de redireccionamiento y proxy_pass los datos, por supuesto, coloque la URL de su sitio web en el lugar de la URL de mi blog. (Solicitud: cuestione esto solo después de haberlo intentado)
Y mira la magia.
Y definitivamente funciona, al menos para mí.
fuente
Comience desde index.html, elimine todo,
#
por<a href="#/aboutus">About Us</a>
lo que debe verse como<a href="https://stackoverflow.com/aboutus">About Us</a>
.Ahora en la etiqueta principal de index.html, escriba<base href="https://stackoverflow.com/">
justo después de la última metaetiqueta .Ahora en su enrutamiento js inyecte
$locationProvider
y escriba$locatonProvider.html5Mode(true);
algo como esto: -Para obtener más detalles, vea este video https://www.youtube.com/watch?v=XsRugDQaGOo
fuente
Supongo que esto es realmente tarde para esto. Pero agregar la configuración a continuación a las importaciones de app.module hace el trabajo:
fuente
Paso 1: inyecta el servicio $ locationProvider en el constructor de la configuración de la aplicación
Paso 2: Agregue la línea de código $ locationProvider.html5Mode (true) al constructor de la configuración de la aplicación.
Paso 3: en la página del contenedor (aterrizaje, master o diseño), agregue la etiqueta html como
<base href="https://stackoverflow.com/">
dentro de la etiqueta.Paso 4: elimine todos los '# "para la configuración de enrutamiento de todas las etiquetas de anclaje. Por ejemplo, href =" # home "se convierte en href =" home "; href =" # about "se convierte en herf =" about "; href =" # contact "se convierte en href =" contacto "
fuente
Sólo tiene que añadir
$locationProvider
Eny luego agregue
$locationProvider.hashPrefix('');
despuésEso es.
fuente