Angular новый маршрутизатор - вложенные компоненты и маршрутизация
Я играю с новым маршрутизатором angular и хочу попробовать использовать случай, когда у меня есть компонент и вложенный компонент.
Ниже приведен код JavaScript, который я написал, чтобы определить два компонента и маршруты:
angular.module('app', ['ngNewRouter'])
.controller('AppController', function ($router) {
$router.config([
{
path: '/parent',
component: 'parent'
}
]);
})
.controller('ParentController', function ($router) {
this.name = 'Parent component';
$router.config([
{
path: '/child',
component: 'child'
}
]);
})
.controller('ChildController', function () {
this.name = 'Child component';
})
.config(function ($componentLoaderProvider) {
$componentLoaderProvider.setTemplateMapping(function (compName) {
return compName + '.html';
});
});
И часть HTML:
<!-- index.html -->
<body ng-controller="AppController as app">
<a ng-link="parent">Go to parent</a>
<div ng-viewport></div>
</body>
<!-- parent.html -->
{{ parent.name }}<br/>
<a ng-link="child">Show child</a>
<div ng-viewport></div>
<!-- child.html -->
{{ child.name }}
Здесь Plunker, содержащий код выше: http://plnkr.co/edit/yWCFgXQI491EYvIldjyR
На основе этого кода у меня есть следующие вопросы/вопросы:
- Если я перейду на самый низкий уровень (#/parent/child), а затем нажмите "Обновить", родительский и дочерний компоненты больше не отображаются. Маршрут не восстанавливается, хотя URL-адрес остается тем же. Нужно ли мне переименовывать или что-то делать для восстановления состояния страницы? Это очень простая функция, позволяющая размещать URL-адреса.
- Если я перейду на самый низкий уровень (#/parent/child), а затем нажмите ссылку "Перейти к родительскому", URL-адрес будет правильно установлен на #/parent, но дочерний компонент все еще будет виден.
Ответы
Ответ 1
Первое, что меня поразило, это то, что вы не используете какой-либо идентификатор, который указывает на родителя и ребенка, который вы хотите отобразить.
Как/где вы получаете эту информацию? Ваш URL выглядел бы намного лучше (и, возможно, даже решил бы проблему, если бы он был написан как
/parent/:parentId/
или
/parent/:parentId/child/:childId
Я в основном сам использовал routeProvider и routeParameters, и они предоставляют эту функциональность без каких-либо хлопот, но поскольку это упражнение выглядит чисто академическим, я постараюсь прочитать, что на самом деле делает модуль, а также проверить, есть ли это проблема, связанная с GitHub.
Кроме того, эта страница из документации, кажется, проливает свет на проблему.
Если это вам совсем не поможет, рассмотрите возможность помочь нам, предоставив нам дополнительную информацию?
Удачи!
Ответ 2
Это старый путь #
var app = angular.module("app", ["ngRoute"]);
app.config(function($routeProvider) {
$routeProvider
.when("/", {
templateUrl : "parent.htm"
})
.when("/other", {
templateUrl : "Default.htm"
});
});
Ответ 3
**Using new way we can do perform routing this .**
(function () {
'use strict';
angular
.module('app', ['parent', 'home', 'ngNewRouter'])
.controller('AppController', function ($router) {
this.header = 'TITLE';
$router.config([
{
path: '/', component: 'home'
},
{
path: '/parent', component: 'parent'
}
]);
});
})();
**I hope this will work .**
Ответ 4
Вы также можете попробовать использовать UI Router.
Вы также можете посмотреть этот, если хотите использовать вложенные маршруты.