javascript - routeprovider - ¿Cómo puedo analizar los parámetros de URL después de un hash con Angularjs?
$routeprovider (4)
Estoy intentando analizar el access_token de Foursquare donde la URL es así:
https://mywebsite.com/4sqredirect/#access_token=1234567890XXXXX
He intentado $ routeParams y $ location y no obtengo nada. Solo después de que intenté $ route, obtuve un objeto con el siguiente atributo:
current: {
params: { }
pathParams: { }
loadedTemplateUrl: partials/4sqredirect
locals: { }
scope: {
this: {
$ref: $["current"]["scope"]
}
route: {
$ref: $
}
location: { }
token: null
}
}
¿Significa esto que no hay manera de obtenerlo usando las funciones nativas de AngularJS debido al hash?
ACTUALIZAR:
mi controlador se ve como sigue:
angular.module(''myApp'')
.controller(''4sqredirectCtrl'', function ($scope, $route, $location, $routeParams) {
$scope.route = $route;
$scope.location = $location;
$scope.token = $routeParams.access_token;
});
Mi js principal se ve como sigue:
angular.module(''myApp'', [
''ngCookies'',
''ngResource'',
''ngSanitize'',
''ngRoute''
])
.config(function ($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider
.when(''/'', {
templateUrl: ''partials/main'',
controller: ''MainCtrl''
})
.when(''/4sqredirect/'', {
templateUrl: ''partials/4sqredirect'',
controller: ''4sqredirectCtrl''
})
.otherwise({
redirectTo: ''/''
});
});
De hecho, Angular JS no ofrece soporte directo para hacer esto. No usaría ngRoute
, porque ya podría esperar el #
en un lugar diferente. Una solución simple para su problema es usar location.hash
y la función substring()
:
<!DOCTYPE html>
<html ng-app="app">
<head>
<script src="http://code.angularjs.org/1.2.6/angular.js"></script>
<link href="style.css" rel="stylesheet" />
<script>
angular.module(''app'', [])
.controller(''AppCtrl'', [''$scope'', ''$window'', function($scope, $window) {
$scope.accessToken = $window.location.hash.substring(14);
}]);
</script>
</head>
<body ng-controller="AppCtrl">
<h1>Access Token</h1>
<p>{{accessToken}}</p>
</body>
</html>
Desde el servicio de ubicación angular $location.hash()
método return #after-hash
así que si tu url se parece
https://mywebsite.com/4sqredirect/#access_token=1234567890XXXXX
entonces
$location.hash()
return access_token=1234567890XXXXX
necesitas dividirlo split(''='')[1]
vea este plunker cuando haga clic en 4Square
luego $location.url()
return
/4sqredirect/#access_token=123456
$location.hash().split(''='')[1]
regreso 123456
No tengo conocimiento de una forma "nativa angular" de hacerlo, pero sí tiene acceso al hash a través de location.hash
como un tipo de cadena. Probablemente no sea ideal, pero es viable.
Utilice $location.search()
//e.g. url https://www.example.com/#!?name=123
var s = $location.search();
// {name: ''123''}
http://docs.angularjs.org/api/ng . $ location
Buscar:
Devuelve la parte de búsqueda (como objeto) de la URL actual cuando se llama sin ningún parámetro.