40

Sto provando a scrivere la mia prima app Web con Angular.Disattivazione della manipolazione URL in AngularJS

Nella modalità normale (html5Mode disattivato), Angular forza la parte hash dell'indirizzo a sembrare un "percorso" (aggiungendo un "/" iniziale) e codifica caratteri speciali, ad esempio, consente un singolo "?" e "#" nell'hash e sostituisce gli altri con% 3F e% 23.

C'è un modo per disattivare questa funzione? Non voglio utilizzare le proprietà $ locationProvider/$ routeProvider - Voglio analizzare l'hash da solo (nel mio caso, l'utente inserirà un po 'di "testo libero" nell'hash per cercare all'interno del mio sito Web).

ho letto che il routeProvider non può essere configurato per utilizzare le espressioni regolari ...

Se htmlMode è acceso, allora parte hash del indirizzo non è costretto a guardare come un percorso (senza leader "/"), ma codifica ancora caratteri speciali.

Sono consapevole che alcuni browser potrebbero codificare/sfuggire i caratteri speciali in ogni caso, ma se l'utente è riuscito a inserire alcuni caratteri speciali nella sua barra degli indirizzi, allora non voglio cambiarlo.

Grazie

risposta

58

Non sono sicuro degli effetti collaterali di questo, ma ottiene il lavoro fatto. Si noti che disabiliterà la manipolazione della posizione dall'app angolare, anche se prevista.

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

Testato in Chrome 30, IE9, IE10.
Ispirato da https://stackoverflow.com/a/16678065/369724

+0

Huh, ho rinunciato a questa idea di funzionalità molto tempo fa ... Solo per la cronaca, sto accettando la tua risposta anche se non l'ho ancora testata. – Oren

+1

Grazie. Spero che qualcuno nel team di angularjs inciamperà e dirà che c'è una strada giusta. Questa soluzione ha richiesto molti tentativi/errori e non è stata trovata fino a quando non ho iniziato a leggere il codice sorgente di angular. Il cliente ora è felice e ho intenzione di eliminare il framework non appena ho tempo. È un giocattolo impressionante, ma si è dimostrato poco pratico da imparare ed ampliare. –

+1

tentativi angolari per manipolare la posizione che porta a un ciclo infinito. – gronke

1

Se ricordo bene, il routing di angolare non è obbligatorio, ma poi si deve prendere cura di ricaricare controllori, viste, ecc

+2

Non è obbligatorio, ma è sempre attivo. Vedrai questo se hai una pagina (foo.html # abc). Se si ricarica, diventa (foo.html #/abc). Il conflitto che ho avuto è stato con l'errore window.history fallito quando si è passati a pushState (...); Back(); in avanti(); perché angolare stava sostituendo l'url così la cronologia in avanti è stata persa - anche se non stavo usando il routing nella parte angularjs della pagina. –

+0

Vorrei provare la build Angular personalizzata, anche se non l'ho mai fatto io :) Il diavolo si trova in 'src/ng/location.js'. Il riferimento a questo file deve essere rimosso da 'angularFiles.js' in modo che Grunt non lo impacchetta. Suppongo che dovresti anche rimuovere il riferimento a '$ LocationProvider' da' src/AngularPublic.js' per evitare errori. – Adam

6

Io uso una copia locale di angular.js. Cerca

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

e

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

commentare le righe corrispondenti e angularjs smetterà di orologio per le modifiche percorso URL.

+1

grazie, sarebbe stato così facile fare un'opzione per questo in angularjs –

Problemi correlati