#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), что имеет смысл, спасибо.