routeprovider javascript angularjs url foursquare angularjs-routing

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.