2016-08-02 5 views
0

Я разрабатываю приложение angularjs с использованием углового ui-router. Существует страница, в которой перечислены элементы, которые можно фильтровать по имени, и она отображается в URL-адресе, например /items? Name = foo. Существует другая страница, например. пользователи, откуда вы можете перейти на страницу элементов, и те отфильтрованы пользователем, например /items? userid = bar.AngularJS одна страница с несколькими состояниями

Я делаю это, имея два состояния для одной и той же страницы в конфигурации маршрутизатора:

.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 не определен, и я не понимаю, почему.

Я не знаю, подходит ли мой подход, я новичок в угловом.

+0

вы смотрите на 'state.reloadOnSearch'? ... кстати, не очень хороший способ поделиться одним и тем же состоянием среди разных приложений, вы не должны объявлять многие состояния с тем же URL ... – Hitmands

+0

Ну, я также (пытался) спросить, если это хороший способ объявить более одного состояния для одной и той же страницы или с тем же URL-адресом, или я должен искать/вычислять другое решение. Благодаря! – 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

Что-то вроде [этого] (http://pastebin.com/gUnUcG21). Я понял, что, когда страница загружается с идентификатором пользователя, она находится в $ stateparams, но после перезагрузки dofilter ее потеряно. – nolley

Смежные вопросы