Подтвердить что ты не робот

Параметры для состояний без URL-адресов в u-router для AngularJS

Я использую ui-router для представления состояний в моем приложении AngularJS. В нем я хотел бы изменить состояние без изменения URL (в основном обновляется "подробное представление", но это не должно влиять на URL-адрес).

Я использую <a ui-sref="item.detail({id: item.id})"> для отображения детали, но это работает только в том случае, если я укажу URL как url: "/detail-:id" в моем $stateProvider.

Мне кажется, что текущее состояние определяется только через URL.

4b9b3361

Ответ 1

Спасибо за ваш ответ, это помогло мне в правильном направлении, но я просто хотел бы добавить более полное описание.

В моей конкретной проблеме был сложный фактор, потому что состояние, в которое мне нужно было ввести параметр без URL-адреса, было дочерним. Это немного сложно.

Часть params: ['id'] находится в объявлении $stateProvider следующим образом:

$stateProvider.state('parent', {
    url: '/:parentParam',
    templateUrl: '...',
    controller: '...'
}).
state('parent.child', {
    params: ['parentParam','childParam'],
    templateUrl: '...',
    controller: '...'
});

И имя параметра связано с атрибутом ui-sref следующим образом:

<a ui-sref=".child({ childParam: 'foo' })">

И это уловка:

Если родительское состояние также имеет параметр URL, тогда для дочернего требуетсятакже объявить, что в массиве params. В приведенном выше примере "parentParam" должен быть включен в дочернее состояние.

Если вы этого не сделаете, тогда при инициализации приложения будет выведено сообщение об ошибке модуля. Это, по крайней мере, актуально в последней версии на момент написания статьи (v.0.2.10).

ИЗМЕНИТЬ

@gulsahkandemir указывает, что

Объявление параметров в определении состояния изменилось на params: { id: {}} из params: ['id']

Судя по списку изменений, это, по-видимому, имеет место, начиная с v0.2.11

Детали параметров можно найти в официальных документах

Ответ 2

Просто дополнительная информация для новых посетителей этой страницы:

Объявление параметров в определении состояния изменилось на params: { id: {} } с params: ['id']

Знайте:)

Источник: http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$stateProvider

Ответ 3

Теперь я понял, что вам нужно использовать свойство params: ['id'] для того, чтобы ключ не был разделен, когда вы не используете URL-адрес.