我可以使用ngRoute设置参数吗?

时间:2016-01-10 00:25:17

标签: angularjs ngroute angularjs-ng-route

我正在创建一个显示项目列表的应用程序,然后可以通过多个过滤器对该列表进行细化。如果我要从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")

之类的事情

1 个答案:

答案 0 :(得分:2)

如果您想更改网址,则应通过$location服务。

执行此操作

具体而言,$location.search(search, paramValue)将允许您更改查询字符串值。

我制作了一个插件,演示了使用HTML5模式和使用这些功能更改$ location。 It can be found here.要查看网址更改,请点击弹出按钮pop-out button on plnkr

您不必自己进行字符串解析。 AngularJS还允许您(具有相同的功能)查询当前设置的参数。因此,问题是查询所有网址值,更改您要更改的网址,然后重新设置值。

这是示例中的第二个按钮演示的内容。即使第一个按钮只设置自己的值(并删除其他按钮),第二个按钮也会保留所有其他项目。

相关代码:

var values = $location.search();
values.orderThatsUpdating = newOrderValue;
$location.search(values);