Я разрабатываю приложение angularjs с использованием углового ui-router. Существует страница, в которой перечислены элементы, которые можно фильтровать по имени, и она отображается в URL-адресе, например /items? Name = foo. Существует другая страница, например, пользователи, откуда вы можете перейти на страницу элементов, и те, которые фильтруются пользователем, например /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'
})
Я делаю это так, чтобы щелкнуть по странице элементов на панели навигации, идет на обычную страницу элементов, которую пользователь не фильтровал.
Но когда вы переходите на страницу элементов с пользователей, идентификатор пользователя появляется в URL-адресе, но в $ stateparams userid не определен, и я не понимаю, почему.
Я не знаю, подходит ли мой подход, я новичок в угловой.
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
state.reloadOnSearch
? ... кстати, это не самый лучший способ использовать одно и то же состояние среди разных сущностей приложения, вы не должны объявлять много состояний с одинаковыми URL-адресами ...