Невозможно перейти в состояние с помощью Angular ui-router

#javascript #angularjs #angular-ui-router

#javascript #angularjs #angular-ui-router

Вопрос:

Я пытаюсь заставить маршрутизацию с отслеживанием состояния работать в приложении AngularJS. Моя конфигурация выглядит следующим образом:

 app.config(function($stateProvider, $urlRouterProvider) {
  $stateProvider
    .state('index', {          
      url: '^/',               
      templateUrl: 'templates/home.html'
    })
    .state('messsage', {          
      url: '/message/:id',       
      templateUrl: 'templates/message.html'
  });

  // internal redirect to '/' as default
  $urlRouterProvider.otherwise("/");
});
  

Отображается исходное состояние, но когда я нажимаю на ссылку на второе состояние, я получаю сообщение об ошибке в консоли, в основном говорящее, что оно не может перейти в состояние:

 Error: Could not resolve '#/message/0' from state 'index'
  

Ссылки на документы / API, которые я смог найти, мне не очень помогли.

Комментарии:

1. Я не вижу, что не так, как вы пытаетесь перейти к состоянию сообщения из индекса?

Ответ №1:

Проблема здесь вызвана неправильным использованием ui-sref директивы. Существует плунжер, показывающий проблему.

Если внутри шаблона состояния индекса мы создаем ссылку, подобную этой:

 <a ui-sref="#/message/0">...
  

мы получим Error: Could not resolve '#/message/0' from state 'index'

Синтаксис, который будет работать, должен быть таким (оба одинаковы):

 <a href="#/message/0">...     
<a ui-sref="message({id:0})">...
  

Проверьте это здесь

Комментарии:

1. Изначально я делал это: <a ui-sref=»/message/{{message.id }}»><div class=»item item-image»><img ng-src=»img/{{message.img}}»></div></a> И теперь изменили его на: <a ui-sref=»сообщение({{message.id }})»><div class=»item item-image»><img ng-src=»img/{{message.img}}»></div></a> который, как видно, сейчас работает, спасибо. Что означает: 0 после идентификатора в вашем примере?

2. синтаксис ui-sref="message({id:0}) — это правильный способ вызова состояния и передачи параметров. id In {id:0} — это имя параметра. Почему? Потому что могло бы быть больше похоже на сообщение ui-sref=»({id: 0, otherParam: ‘abc’}). Ваша первоначальная попытка была именно такой, как я сказал: неправильной, потому что вы поместили URL в ui-sref . Содержимое ui-sref — это имя состояния, за которым следует объект param внутри фигурных скобок: stateName({param1:value1,param2:value2}) … Имеет ли это смысл сейчас?

3. Да, вы передаете объект (и параметры в формате JSON), что имеет смысл, спасибо.