AngularJS $位置路由器和GET PArams - 最佳实践?

时间:2014-03-14 12:51:06

标签: angularjs angular-ui-router

我将AngularJSangular-ui-router组件一起用于我的单页网站。

如果我想切换到另一个视图(路径)并添加参数,我可以像这样组合使用$location.path()和$ location.search():

$location.path('/foo/bar/').search('q','foobar');

现在我还需要生成Urls(即填充我网站上的链接或提供深层链接 - 这里直接链接)。所以我有一个服务,根据用户输入和状态参数生成并提供Urls。

通常我会让服务提供/foo/bar/?q=foobar之类的东西,但是每当我想用$ location设置这样的链接时我就不得不使用字符串操作去除GET参数,调用原始路径并将其余部分添加到.search()。

var url = '/foo/bar/?q=foobar'
var tmpUrlParams = url.split('?')[1].split('&');
$location.path('url.split('?')[1]');
for (var i=0;i <= tmpUrlParams.length; i++){
  $location.search(tmpUrlParams[i].split('=')[0], tmpUrlParams[i].split('=')[1]);
}

有更好的解决方案吗?我知道有...但是它是什么?

1 个答案:

答案 0 :(得分:3)

也许我误解了您的问题,但为什么不能在url上使用$location方法,因为它会正确解释您的查询字符串参数?

//Calling $location.url()
$location.url('/somepath?foo=bar');

//Will result in these values
$location.url(); // '/somepath?foo=bar'
$location.path(); // '/somepath'
$location.search(); // '{"foo":"bar"}'

以下是您可以使用的interactive jsFiddle,可以自己查看$location api的各种值。