page navigationend change javascript angularjs address-bar location-provider route-provider

javascript - navigationend - router events subscribe angular 4



Desactivar la manipulaciĆ³n de URL en AngularJS (3)

Intento escribir mi primera aplicación web con Angular.

En el modo normal (html5Mode off), Angular fuerza a la parte hash de la dirección a parecerse a una "ruta" (agregando una "/" inicial), y codifica caracteres especiales, por ejemplo, permite un solo "?" y "#" en el hash y reemplaza a los demás con% 3F y% 23.

¿Hay alguna manera de desactivar esta característica? No quiero usar las características $ locationProvider / $ routeProvider . Quiero analizar el hash yo mismo (en mi caso, el usuario ingresará un poco de "texto libre" en el hash para buscar dentro de mi sitio web).

Leí que routeProvider no se puede configurar para usar expresiones regulares ...

Si htmlMode está activado, la parte hash de la dirección no está forzada a parecerse a una ruta (sin ""), pero aún codifica caracteres especiales.

Soy consciente de que algunos navegadores pueden codificar / escapar de los caracteres especiales de todos modos, pero si el usuario logró ingresar algunos caracteres especiales en su barra de direcciones, entonces no quiero cambiarlo.

Gracias


No estoy seguro de los efectos secundarios de esto, pero hace el trabajo bien. Tenga en cuenta que desactivará toda la manipulación de la ubicación desde la aplicación angular, incluso si está previsto.

angular.module(''sample'', []) .config( [''$provide'', function ($provide){ $provide.decorator(''$browser'', [''$delegate'', function ($delegate) { $delegate.onUrlChange = function () {}; $delegate.url = function () { return ""}; return $delegate; }]); }]);

Probado en Chrome 30, IE9, IE10.
Inspirado por https://.com/a/16678065/369724


Si no recuerdo mal, el enrutamiento de Angular no es obligatorio, pero debes encargarte de volver a cargar los controladores, las vistas, etc.


Utilizo una copia local de angular.js. Buscar

$browser.onUrlChange(function(newUrl, newState) {

y

$rootScope.$watch(function $locationWatch() {

comente las líneas correspondientes y angularjs dejará de mirar los cambios de la URL de ubicación.