2014-12-08 16 views
6

Sono attualmente allo /addDoc e desidero l'itinerario corrente in cui mi trovo. Ecco il mio controller:

app.controller('DocRegistrationController',[ '$http', '$scope', '$upload', '$location', function($http, $scope, $upload, $location){ 
$scope.validation=function(){ 
    alert($location.path()); 
} 
    } 

Tuttavia restituisce vuoto. Non voglio hardcode tutti i percorsi. Che cosa sto facendo di sbagliato?

+0

Si sta utilizzando '$ routeProvider' in modalità HTML5 (nessun '#' accesso nell'URL) o no? – GregL

+0

Non ho usato $ routeProvider, lo voglio per chiamare api da una chiamata Ajax. – Pravin

+0

Cosa ottieni quando esegui 'console.dir ($ posizione)'? – GregL

risposta

20

$ Il servizio di localizzazione risponde per l'analisi dell'URL nella barra degli indirizzi del browser e rende l'URL disponibile per l'APP.

Poiché si utilizzano segmenti di ricerca e percorso URL standard, è necessario impostare $ locationProvider html5Mode su true.

$ locationProvider utilizzerà hashbang come modalità predefinita.

Se non si imposta html5Mode su true, si otterrà una stringa vuota quando si tenta di recuperare il percorso url.

Quindi utilizzare $ location service per recuperare il percorso dell'URL dopo aver impostato html5Mode.

E scrivi la tua regola per elaborare il percorso.

Si supponga che l'URL completo è: http://example.com/person/show/321

main.js

angular.module("MyAPP",[],function($locationProvider){ 
    $locationProvider.html5Mode(true); 
}); 

function MainController($location){ 
    var pId = $location.path().split("/")[3]||"Unknown"; //path will be /person/show/321/, and array looks like: ["","person","show","321",""] 
    console.log(pId); 
} 

index.html

<!DOCTYPE html> 
<html lang="en" ng-app="MyAPP"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Angular test</title> 
    </head> 
    <body ng-controller="MainController"> 
     <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script> 
     <script src="js/main.js"></script> 
    </body> 
</html> 

Spero che questo è utile per voi.

+0

grazie compagno. questo è stato molto utile. – Pravin

+0

impostando 'html5Mode' su true ha sollevato un problema in cui non è stato possibile caricare alcun collegamento alla route desiderata, è stato modificato solo l'indirizzo della barra di indirizzo. Ho risolto questo problema facendo riferimento alla domanda [this] (http://stackoverflow.com/questions/19773682/angularjs-a-tag-links-not-working), mettendo 'target = '_ self' nel tag anchor. – Pravin

+1

Se si configura '$ location' per usare' html5Mode (history.pushState) ', è necessario specificare l'URL di base per l'applicazione con un tag' 'o configurare' $ locationProvider' per non richiedere un tag base passando un oggetto definizione con 'requireBase: false' a' $ locationProvider.html5Mode() '. Oppure si otterrà un errore 'Errore: $ posizione: nobase' come in https://docs.angularjs.org/error/$location/nobase – mcy

1

Prova anche questo, che è il codice nativo in JS. Ha funzionato per me. Ma se hai bisogno di analizzare un url lungo con molte pagine annidate, devi modificare un po 'il codice.

Problemi correlati