【问题标题】:AngularJS one page with multiple statesAngularJS 一页有多种状态
【发布时间】:2016-08-02 11:51:34
【问题描述】:

我正在使用 angular-ui-router 开发一个 angularjs 应用程序。有一个页面列出了项目,可以按名称过滤,它显示在 /items?name=foo 之类的 url 中。还有一个页面,例如用户,您可以从该页面导航到项目页面,这些页面由用户过滤,例如 /items?userid=bar

我通过在路由器配置中为同一页面设置两种状态来做到这一点:

.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'
})

我这样做是为了点击导航栏上的项目页面会转到未经过用户过滤的普通项目页面。

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

我不知道我的方法是否正确,我是 angular 新手。

【问题讨论】:

  • 你看过state.reloadOnSearch吗? ...顺便说一句,在不同的应用程序实体之间共享相同的状态并不是一个好方法,你不应该用相同的 url 声明许多状态...
  • 好吧,我也(试图)询问是否是为同一页面或具有相同 url 声明多个状态的好方法,或者我应该搜索/找出另一种解决方案。谢谢!

标签: javascript angularjs angular-ui-router


【解决方案1】:

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

【讨论】:

  • 嗯,它和以前一样,用冒号。也许问题不在于路由?如果其他一切都正确,这应该不会造成任何问题?
  • 可以上传控制器代码吗?让我们看看$stateparams 的用法
  • 类似于this。我发现当页面使用用户 ID 加载时,它在 $stateparams 中,但在 dofilter 重新加载后,它就丢失了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 2021-10-01
相关资源
最近更新 更多