【问题标题】:How to append query strings to the URL in Angular ui-router如何将查询字符串附加到 Angular ui-router 中的 URL
【发布时间】:2016-08-08 16:58:02
【问题描述】:

我对 AngularJS 还是很陌生。我正在使用 ui-router 和 node.js 作为我的 UI 服务器,用于对另一台服务器进行 API 调用。现在,我无法根据用户输入(下拉选择)将查询字符串附加到 URL。

我的 AngularJS 控制器代码:

$scope.getResults = function() {
    server.getResults($scope.myColor, $scope.mySize)
    .success(function(data) {
        results = data;
    });
};

上述功能的AngularJS服务:

app.factory('server', ['$http', function($http){
    return { 
        getResults : function(color, size) {
            var req = {};
            req.color = color;
            req.size = size;

            return $http({
                method: 'GET', 
                url: 'results',
                params : req
            });
        }
    }
}]);

Angular 中的 ui-router:

$stateProvider.state('home', {
    url: '/home',
    templateUrl: '/home.html',
    controller: 'MainCtrl',
    data:{ 
       pageTitle: 'blah' 
    }
})

在 Node.js 中,我的路线是这样的:

app.get("/results", function (req, res) {

    var api = 'some api call/' + req.query.color + '/' + req.query.size;

    request(api, function (error, response, api) {

        if (!error && response.statusCode == 200) {
            res.json({
                Color: req.query.color, 
                Size: req.query.size,
                Answer: api
            });
        }
    });
});

我想让浏览器 url 从 /home 转到 /home?color=Red&&size=Large

显然我做的不对,浏览器 url 现在不是动态的。请展示如何正确执行此操作。

【问题讨论】:

    标签: html angularjs node.js angular-ui-router angularjs-routing


    【解决方案1】:

    当状态参数发生变化时,请使用reloadOnSearch: false 选项来停止重新加载当前路由。

    $stateProvider.state('home', {
        url: '/home?color&size',
        templateUrl: '/home.html',
        controller: 'MainCtrl',
        data:{ 
           pageTitle: 'blah' 
        },
        reloadOnSearch: false //would not refresh state, for location changes.
    })
    

    控制器

    $scope.getResults = function() {
        //change parameter of URL usingn $location.search.
        $location.search('color', $scope.myColor);
        $location.search('size', $scope.mySize);
        server.getResults($scope.myColor, $scope.mySize)
        .success(function(data) {
            results = data;
        });
    };
    

    【讨论】:

    • @jebmarcus 很高兴知道这一点。谢谢:-)
    • @PankajParker btw url 按预期更改,但是当我复制 url 并将其粘贴到新选项卡中时,服务器不会像通常那样被调用
    • 有什么办法解决这个问题?
    • @jebmarcus 在初始数据调用时确实从状态参数中获取参数,如$stateParams.color$stateParams.size 来读取这些参数并传入 ajax 调用..
    • @PankajParker 我对初始数据调用的意思有点困惑。我认为这里的问题是现在的 url 是这样的:“localhost:3000/#/home?color=Red&size=Large”但是我正在返回 $http 我有 url:'results' not 'home
    猜你喜欢
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多