从网址获取路线参数

时间:2015-08-11 14:11:44

标签: javascript php angularjs node.js

我正在尝试从重置pw电子邮件中的链接中检索重置pw令牌。该链接使用我想要获取的令牌将用户发送回我的node / angular应用程序。

Laravel API:电子邮件模板

            <td class="content">
               <a href="http://localhost:3000/reset-password?token={{$token}}">Reset Your Password</a>
            </td>

节点/角度应用:ResetPassword.ejs模板:我使用的是角度控制器:

<div ng-controller="resetPasswordCtrl">
    ...stuff
</div>

重置密码控制器:

'use strict';

angular
    .module('myApp')
    .controller('resetPasswordCtrl', ['$scope', '$routeParams', '$location', function($scope, $routeParams, $location) {

        console.log('ROUTE PARAMS', $routeParams); //object with a bunch of getters/setters
        console.log('ROUTE PARAMS', $routeParams.token); //undefined
        console.log('Location', $location.search('token'));  //LocationHashbangUrl
        console.log('Location', $location.search().token);  //true
        console.log('Location', $location.search()['token']); //true
        console.log('Route current params', $route); //empty route object 

    }]);

对于LocationHashbangUrl($location.search('token')),我知道我正在使用令牌获取正确的URL,因为$$ absUrl显示了它。

enter image description here

为什么我无法使用控制器中显示的其中一种方法检索token参数?

2 个答案:

答案 0 :(得分:0)

你可以发布你的$ routeProvider吗?您可以在其中添加令牌作为参数,然后$ routeParams.token将执行您想要的操作。像这样:

$routeProvider.when('/reset-password/:token')

这意味着你的重置密码网址看起来像这样:

http://localhost:3000/reset-password/{{$token}}

答案 1 :(得分:0)

原来不使用html5 / angular routing,典型的方法

$location.search()
$routeParams

无效。

由于我传递params并从外部访问我的节点应用程序(从laravel分发的电子邮件链接),我需要使用javascript解析URI。

我发现this resource让事情变得简单。因此,以下工作:

'use strict';

angular
    .module('myApp')
    .controller('resetPasswordCtrl', ['$scope', '$window', function($scope, $route, $window) {

        var getURIParams = function(variable) {
            var query = $window.location.search.substring(1);
            var vars = query.split('&');
            for (var i = 0; i < vars.length; i++) {
                var pair = vars[i].split('=');
                if (decodeURIComponent(pair[0]) == variable) {
                    return decodeURIComponent(pair[1]);
                }
            }
            console.log('Query variable %s not found', variable);
        };
        console.log('VAR', getURIParams('token')); //my token param
    }]);