从URL AngularJS中删除路由参数

时间:2015-11-12 16:35:21

标签: javascript angularjs angular-routing

我想从网址中删除路由参数。

我的网址可以是 http://host.domain/#/events/eventId http://host.domain/#/user/userId/events/eventId 我的$ routeProvider设置为&#39; / events /:eventId?&#39; &#39; user /:userId / events /:eventId?&#39; < / em>的

设置 eventId 后,我会显示弹出窗口。当用户单击关闭按钮时,我想从url中删除eventId。我怎么能这样做?

P.S。我在寻找像这样的东西

delete $route.current.params.eventId;

但没有任何成功

2 个答案:

答案 0 :(得分:0)

您无法使用delete执行此操作。该关键字用于从JavaScript对象中删除属性。

通常,人们只需添加如下按钮:

<button ui-sref="events()">Close</button>

或他们使用$state.go命令:

$state.go("events", { });

在这种情况下events是没有eventId参数的路线。

答案 1 :(得分:0)

我强烈建议你研究UI-Router。它比ngRoute更加通用,并提供上述模块所做的一切。

使用它,您可以定义一个单独的状态,以便在没有 eventId 时进行。

.state("mystate", {
   url: "/",
   template: "..."
})
.state("mystate.event", {
   url: "/:eventId",
   template: "..."
   ...
});

像“ / 321 ”这样的网址会匹配状态 mystate.event ,而“ / ”会解析为 mystate 即可。 如果您想点击某个内容并从一种状态转到另一种状态,则可以使用 ui-sref

去没有任何参数的州:

ui-sref="targetState";

去一个有params的州:

ui-sref="targetState({ paramName: param });

在你的情况下,你可以有类似的东西:

<div ui-sref="mystate">Click to Close</div>

这就是它的全部内容。 This tutorial涵盖了开始使用UI-Router所需的基础知识,您还可以在同一网站上找到有关同一主题的提示和技巧。

修改

您也可以按照Martin的回答中描述的方式进行。