J'essaie d'analyser le access_token de Foursquare où l'URL est comme ceci:
https://mywebsite.com/4sqredirect/#access_token=1234567890XXXXX
J'ai essayé $ routeParams et $ location et je ne reçois rien en retour. Ce n'est qu'après avoir essayé $ route que j'ai récupéré un objet avec l'attribut suivant:
current: {
params: { }
pathParams: { }
loadedTemplateUrl: partials/4sqredirect
locals: { }
scope: {
this: {
$ref: $["current"]["scope"]
}
route: {
$ref: $
}
location: { }
token: null
}
}
Est-ce à dire qu'il n'y a aucun moyen de l'obtenir en utilisant les fonctions natives AngularJS à cause du hachage?
MISE À JOUR:
mon contrôleur ressemble à ceci:
angular.module('myApp')
.controller('4sqredirectCtrl', function ($scope, $route, $location, $routeParams) {
$scope.route = $route;
$scope.location = $location;
$scope.token = $routeParams.access_token;
});
mon js principal ressemble à ceci:
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 service de localisation angulaire$location.hash()
méthode retourne #after-hash
donc si votre URL ressemble à
https://mywebsite.com/4sqredirect/#access_token=1234567890XXXXX
puis
$location.hash()
retourne access_token=1234567890XXXXX
vous devez le diviser split('=')[1]
voyez ceci plunker lorsque vous cliquez sur 4Square
puis $location.url()
return
/4sqredirect/#access_token=123456
$location.hash().split('=')[1]
retourner 123456
Utilisez $location.search()
//e.g. url https://www.example.com/#!?name=123
var s = $location.search();
// {name: '123'}
http://docs.angularjs.org/api/ng . $ location
Chercher:
Renvoie la partie de recherche (en tant qu'objet) de l'URL actuelle lorsqu'elle est appelée sans aucun paramètre.
Je ne connais pas de méthode "native angulaire", mais vous avez accès au hachage via location.hash
comme type de chaîne. ce n'est probablement pas idéal, mais c'est réalisable.
Il n'y a en fait aucun support direct de Angular JS pour ce faire. Je n'utiliserais pas ngRoute
, car il pourrait déjà s'attendre à ce que le #
Soit différent Une solution simple à votre problème consiste à utiliser les fonctions location.hash
et 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>