2016-08-02 87 views
0

我正在开发一个使用angular-ui-router的angularjs应用程序。有一个列出项目的页面,可以通过名称进行筛选,并且它显示在URL中,如/items?name = foo。还有一个页面,例如用户,从那里你可以导航到项目页面,并按用户过滤,如/items?userid = barAngularJS一个多页状态页面

我这样做,通过在路由器配置在同一页的两种状态:

.state('index.items', { 
    url: '/items?:name', 
    controller: 'ItemCtrl as ctrl', 
    templateUrl: 'item/index.html', 
    brParent: 'index.home' 
}) 
.state('index.itemsOfUser', { 
    url: '/items?:userid&:name', 
    controller: 'ItemCtrl as ctrl', 
    templateUrl: 'item/index.html', 
    brParent: 'index.home' 
}) 

我这样做,所以点击导航条上的项目页转到正常的项目页面而不是用户过滤。

但是,当从用户导航到项目页面时,userid出现在url中,但在$ stateparams userid中是未定义的,我不明白为什么。

我不知道我的方法是否正确,我是新的角度。

+0

你看看'state.reloadOnSearch'? ...顺便说一下,不是一个好方法在不同的应用程序实体之间共享相同的状态,你不应该声明许多状态具有相同的url ... – Hitmands

+0

嗯,我也(试图)问是否是一种好方法为相同页面或相同网址声明多个州,或者我应该搜索/找出另一个解决方案。谢谢! – nolley

回答

2

ui-router使得能够检索查询字符串参数。你的代码几乎是正确的,只是一个小语法修复:

.state('index.items', { 
    url: '/items?name', // Remove semicolon 
    controller: 'ItemCtrl as ctrl', 
    templateUrl: 'item/index.html', 
    brParent: 'index.home' 
}) 
.state('index.itemsOfUser', { 
    url: '/items?userid&name', // Remove semicolons 
    controller: 'ItemCtrl as ctrl', 
    templateUrl: 'item/index.html', 
    brParent: 'index.home' 
}) 

如文档指出:https://github.com/angular-ui/ui-router/wiki/URL-Routing#query-parameters

+0

好吧,它和以前一样,用冒号。也许问题不在于路由?如果一切正常,这不应该有任何问题? – nolley

+0

你可以上传控制器代码吗?让我们看看'$ stateparams'的用法 – AranS

+0

它就像[this](http://pastebin.com/gUnUcG21)。我发现当页面用userid加载时,它在$ stateparams中,但在dofilter重新加载之后,它丢失了。 – nolley