AngularJs使用index和routeparams生成更改生成的URL

时间:2016-10-24 23:21:08

标签: angularjs

在浏览器的地址栏中,$ routeProvider返回“... / index#/ projects / 0”。 这是该特定项目的视图。我想要实现的是隐藏indexOf值,在本例中为“0”并将url设置为“... / index#/ projects / somethingelse”。使用$ routeProvider配置中的<a href="#/projects/{{projects.indexOf(project)}}">和“/ projects /:id”链接到项目。我尝试过某些方法,但无法获得任何结果。

例如,调用projects数组中的第一个项目,浏览器中的url为“/ projects / 0”。是否可以替换0以使url从1开始,但仍然返回项目数组[0]中对象的值,依此类推。基本上试图在控制器或服务中找到重写方法。目前正在抓住AngularJS。

我已经来到这个answer,但不知道该怎么做才能实现我的需要。通过这个答案,我在控制器$location.path($route.updateParams({id:"project"}));中尝试了以下代码,它确实给出了所需的结果:从“... / index#/ projects / 0”到“../index#/projects/project”但是导航到视图时,它是空白的,不会返回项目详细信息。

还有任何好的指针,教程,关于URL重写和AngularJS安全性的书籍?我使用的AngularJs版本是1.5.8。

1 个答案:

答案 0 :(得分:1)

您可以在路线参数中使用您想要的任何内容,只要您可以将其链接到正确的数据。

如果你想将索引偏移1,只需使用类似的东西(假设projects可用/可注射)

.when('/projects/:id', {
    resolve: {
        project: function($routeParams, projects) {
            return projects[$routeParams.id - 1];
        }
    },
    // etc

要使用id之类的任意属性,请尝试Array.prototype.find

resolve: {
    project: function($routeParams, projects) {
        return projects.find(project => project.id === $routeParams.id);
    }
}

要创建链接,您可以使用

之类的内容
<a ng-href="#/projects/{{projects.indexOf(project) + 1}}">

<a ng-href="#/projects/{{project.id}}">