我正在创建一个显示项目列表的应用程序,然后可以通过多个过滤器对该列表进行细化。如果我要从URL字符串中获取这些选项的列表,那么访问者可以共享(或书签)链接,该链接将您带到已过滤的数据列表。但我的问题是如何将这些选项写入URL字符串?
所以我们的想法是,一旦选择了一个select元素,就可以优化结果。让我们举个例子说它只是项目的顺序。
<select ng-model="order" ng-change="changeOrder()">
<option ng-repeat="['date', 'amplitude', 'name'] as option">{{ option }}</option>
</select>
我想将该选项写入URL字符串,以便它现在包含(如果您已选择幅度)?order=amplitude
。现在,如果刷新页面,数据可以很容易地再次按幅度排序。
但是当有很多这些过滤器和排序选项,并且它们都可以设置或重置为默认值时,将这些选项全部放在一起变得相当困难,以检查选项是否已经在字符串中,以便如果没有其他选项,是否将其添加到?
后面,或者如果已经定义了其他选项则添加&
。
换句话说,我想知道的是ngRoute
提供了设置参数的方法;不只是读它们?所以我可以做$routeParams.set("order", "amplitude")
。
答案 0 :(得分:2)
如果您想更改网址,则应通过$location
服务。
具体而言,$location.search(search, paramValue)
将允许您更改查询字符串值。
我制作了一个插件,演示了使用HTML5模式和使用这些功能更改$ location。 It can be found here.要查看网址更改,请点击弹出按钮。
您不必自己进行字符串解析。 AngularJS还允许您(具有相同的功能)查询当前设置的参数。因此,问题是查询所有网址值,更改您要更改的网址,然后重新设置值。
这是示例中的第二个按钮演示的内容。即使第一个按钮只设置自己的值(并删除其他按钮),第二个按钮也会保留所有其他项目。
相关代码:
var values = $location.search();
values.orderThatsUpdating = newOrderValue;
$location.search(values);