Проблема:
Причина этого сообщения об ошибке в том, что с новым угловых маршрутизациями 2 RC1, вы, по сути построения дерева маршрута так, когда вы просите '/parent/child/1'
ваш второго последний сегмент маршрута (/child/
) отправляет вас в ChildComponent и угловатый внешний вид в ChildComponent, чтобы узнать, есть ли какие-либо маршруты, которые могут соответствовать следующему сегменту (/1
), и поскольку у вас нет маршрутов, определенных в ChildComponent, это исключает это исключение:
Cannot match any routes. Current segment: '1'. Available routes: [].
Решение:
Определение вашего (плоский) маршрут дерево в AppComponent, как вы сделали это, безусловно, один из способов решения этой проблемы. Другой способ дифференцировать свои вторые маршруты уровня путем изменения маршрутов в ParentComponent на:
@Routes([
{ path: 'childs', component: ChildComponent },
{ path: 'child/:id', component: ChildComponent },
])
В основном мы создаем две ветви, являющиеся childs
и child/:id
как маршрутизируется ChildComponent.
Зачем стоит определять маршрут ?
В основном Угловые 2 RC1 маршрутизатор делает не лечить child/:id
маршрут в целом, когда маршрут по имени child
также определяются, вместо этого, угловой маршрутизатор разбивает child/:id
маршрута на два маршрут сегменты child
и :id
, а затем использовать определение маршрут child
, чтобы отвезти вас в ChildComponent, а затем найдите определение маршрута для сегмента :id
в ChildComponent, которого он не смог найти. Переименовывая child
маршрут до childs
, мы вынуждаем нас принять child/:id
в целом и взять нас в ChildComponent как конечный пункт назначения, который мы хотим.
Deep Links
Что касается вашего второго вопроса с глубокими связями:
Nested route also do not works when I use just a simple url: e.g. http://server/parent/child/1
Если предположить, что вы используете по умолчанию PathLocationStrategy
в качестве LocationStrategy, вы должны убедиться, что ваш веб-сервер служит для файла index.html
для каждого маршрута маршрута. Например, в живом сервере добавить следующий аргумент команды веб запуска сервера:
live-server --entry-file=index.html
Update: Looks like this is a known bug in RC1 and changing the order of the Routes makes everything to work correctly. Please see David's answer for an example.
Проблема, которую вы описали, имеет смысл - она определенно пытается найти маршрут в дочернем компоненте. Но можете ли вы предоставить более подробную информацию о том, что вы подразумеваете под «childs» в решении? Нужно ли иметь? была ошибка «/: id» ошибки? –
Несомненно, пожалуйста, взгляните на мой обновленный ответ. –
Спасибо за подробные ответы. В настоящее время известно об ошибке https://github.com/angular/angular/issues/8420 –