通过漂亮的URL将param传递给MEAN应用程序?

时间:2015-07-01 15:06:13

标签: angularjs express mean-stack

在保持漂亮的URL的同时将param传递给MEAN应用程序的最佳方法是什么? 我不能在客户端上使用存储器。以下Express路由将成功引导Angular应用程序中的param,但URL很难看......

globeobject.saveInBackground();

参数化网址:

router.get('/:bid', function(req, res, next) {
    var bid = req.params.bid || '';
    res.render('index', { initData: { bid: bid } });
});

变为:

http://localhost:4001/ABC123

我不介意使用查询字符串,但我希望查询字符串params立即消失。

1 个答案:

答案 0 :(得分:1)

(相当肯定的是,从你的其他帖子中,你正在使用UI-Router。我将在这里假设这一点。)

如果您正在使用UI-Router,我会使用值作为参数格式化URL:

http://localhost:4001/#/login/abc123

只要你的国家考虑参数......

(function (module) {

    'use strict';

    var config = function ($stateProvider, $urlRouterProvider) {

        $urlRouterProvider.otherwise("/login");

        $stateProvider
            .state('login', { 
                url: '/login/:bid', 
                templateUrl: 'partials/login.html', 
                params: { 
                    bid: { squash: true, value: null } 
                } 
            });
    };

    module.config(config);

})(angular.module('your-app'));

然后,您可以使用$ stateParams:

将值拉入控制器
(function (module) {

    'use strict';

    var loginController = function ($stateParams) {

        var vm = this;

        vm.bid = $stateParams.bid || '';

    };

    module.controller('Login', loginController);

})(angular.module('your-app'));

按照你的意愿行事:

<div class="container" ng-controller="Login as login">
    <form class="form-signin">
        <h2 class="form-signin-heading">Please sign in: {{ login.bid }}</h2>
    </form>
</div>

当用户点击链接或在其他地方导航时,参数将从网址中消失。

另外,在旁注中,这也会消除对Jade的依赖或通过视图引擎注入它。