如何将查询string附加到Angular ui-router中的URL
我对AngularJS很新颖。 我使用ui-router和node.js作为我的UI服务器来调用另一台服务器的API。 现在,我无法将查询string附加到URL,具体取决于用户input(下拉select)。
我的AngularJS控制器代码:
$scope.getResults = function() { server.getResults($scope.myColor, $scope.mySize) .success(function(data) { results = data; }); };
以上function的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 }); } } }]);
ui路由器在Angular中:
$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现在不是dynamic的。 请显示如何正确执行此操作。
使用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; }); };