Estoy aprendiendo AngularJS y hay una cosa que realmente me molesta.
Yo uso $routeProvider
para declarar reglas de enrutamiento para mi aplicación:
$routeProvider.when('/test', {
controller: TestCtrl,
templateUrl: 'views/test.html'
})
.otherwise({ redirectTo: '/test' });
pero cuando navego a mi aplicación en el navegador, veo en app/#/test
lugar de app/test
.
Entonces, mi pregunta es ¿por qué AngularJS agrega este hash #
a las URL? ¿Hay alguna posibilidad de evitarlo?
javascript
angularjs
pikkvile
fuente
fuente
Respuestas:
De hecho, necesita el # (hashtag) para navegadores que no sean HTML5.
De lo contrario, solo harán una llamada HTTP al servidor en el href mencionado. El # es un cortocircuito de navegador antiguo que no activa la solicitud, lo que permite que muchos frameworks js construyan su propio redireccionamiento en el lado del cliente.
Puede usar
$locationProvider.html5Mode(true)
para decirle a angular que use la estrategia HTML5 si está disponible.Aquí la lista de navegadores que admiten la estrategia HTML5: http://caniuse.com/#feat=history
fuente
Si habilitó html5mode como lo han dicho otros, y cree un
.htaccess
archivo con los siguientes contenidos (ajuste según sus necesidades):Los usuarios serán dirigidos a su aplicación cuando ingresen una ruta adecuada, y su aplicación leerá la ruta y la llevará a la "página" correcta dentro de ella.
EDITAR: solo asegúrese de no tener ningún nombre de archivo o directorio en conflicto con sus rutas.
fuente
/about
la página falla a menos que acceda a través de la aplicación.Vamos a escribir una respuesta que parezca simple y corta
gracias a @plus - por detallar la respuesta anterior
fuente
tratar
Más información en $ locationProvider
Using $ location
fuente
La siguiente información es de:
https://scotch.io/quick-tips/pretty-urls-in-angularjs-removing-the-hashtag
Es muy fácil obtener URL limpias y eliminar el hashtag de la URL en Angular.
Por defecto, AngularJS enrutará las URL con un hashtag. Por ejemplo:
http://www.example.com
http://www.example.com/#/about
http://www.example.com/#/contact
Hay 2 cosas que deben hacerse.
Configurar $ locationProvider
Establecer nuestra base para enlaces relativos
$ servicio de ubicación
En Angular, el servicio $ location analiza la URL en la barra de direcciones y realiza cambios en su aplicación y viceversa.
Recomiendo leer los documentos oficiales de Angular $ para conocer el servicio de ubicación y lo que ofrece.
https://docs.angularjs.org/api/ng/service/$location
$ locationProvider y html5Mode
Haremos esto al definir su aplicación Angular y configurar sus rutas.
¿Qué es la API de historial HTML5? Es una forma estandarizada de manipular el historial del navegador mediante un script. Esto le permite a Angular cambiar el enrutamiento y las URL de nuestras páginas sin actualizar la página. Para obtener más información sobre esto, aquí hay un buen artículo de API de historial HTML5:
http://diveintohtml5.info/history.html
Configuración para enlaces relativos
<base>
en<head>
su documento. Esto puede estar en el archivo raíz index.html de su aplicación Angular. Busque la<base>
etiqueta y configúrela en la URL raíz que desea para su aplicación.Por ejemplo:
<base href="https://stackoverflow.com/">
Reserva para navegadores antiguos
En conclusión
fuente
Si desea configurar esto localmente en OS X 10.8 que sirve Angular con Apache, puede encontrar lo siguiente en su archivo .htaccess:
Las opciones + Seguir enlaces simbólicos si no se configuran pueden generar un error prohibido en los registros de la siguiente manera:
Se requiere reescribir la base; de lo contrario, las solicitudes se resolverán en la raíz del servidor, que localmente no es el directorio del proyecto a menos que haya configurado específicamente sus vhosts, por lo que debe establecer la ruta para que la solicitud encuentre el directorio raíz del proyecto. Por ejemplo, en mi máquina tengo un directorio / Users / me / Sites donde guardo todos mis proyectos. Al igual que la antigua configuración de OS X.
Las siguientes dos líneas dicen efectivamente si la ruta no es un directorio o un archivo, por lo que debe asegurarse de que no tiene archivos o directorios iguales a las rutas de ruta de su aplicación.
La siguiente condición dice que si la solicitud no termina con las extensiones de archivo especificadas, agregue lo que necesita allí
Y el último [L] dice que sirve el archivo index.html, su aplicación para todas las demás solicitudes.
Si todavía tiene problemas, verifique el registro de apache, probablemente le dará consejos útiles:
fuente
El uso del modo HTML5 requiere la reescritura de URL en el lado del servidor, básicamente debe reescribir todos sus enlaces al punto de entrada de su aplicación (por ejemplo, index.html). Requerir una
<base>
etiqueta también es importante para este caso, ya que permite que AngularJS diferencie entre la parte de la URL que es la base de la aplicación y la ruta que debe manejar la aplicación. Para obtener más información, consulte la Guía del desarrollador de AngularJS: uso del modo $ location HTML5 del lado del servidor .Actualizar
Cómo: configurar su servidor para que funcione con html5Mode 1
Cuando tenga habilitado html5Mode, el
#
personaje ya no se usará en sus URL. El#
símbolo es útil porque no requiere configuración del lado del servidor. Sin#
, la url se ve mucho mejor, pero también requiere reescrituras del lado del servidor. Aquí hay unos ejemplos:Apache reescribe
Nginx reescribe
Azure IIS reescribe
Reescribe Express
Ver también
fuente
En Angular 6, con su enrutador puede usar:
fuente
También puede usar el siguiente código para redirigir a la página principal (inicio):
Después de especificar su redirección como se indicó anteriormente, puede redirigir las otras páginas, por ejemplo:
fuente
** **
** porque
fuente