据我所知,Angular 1.5 组件路由器无法同时显示兄弟姐妹。
但是,解决方法是让兄弟姐妹成为真正的孩子,然后使用空组件显示默认的“无详细信息”路线。
解决方法:
首先,我们需要一些根组件来激活列表本身:
.component('listRoot', {
template: '<ng-outlet></ng-outlet>', //just ng-outlet, to render List inside
$routeConfig: [
{path: '/...', name: 'ListRoot',component: 'list' },
]
})
然后我们需要为 list、detail 和 noDetail 模式添加组件。
.component('list', {
template: 'List ... <ng-outlet></ng-outlet>',
$routeConfig: [
{path: '/', name: 'List',component: 'noDetails', useAsDefault: true },
{path: '/:id',name: 'Details',component: 'details'}
],
bindings: {
$router: '<'
},
controller: function () {
var ctrl = this
$routerOnActivate = function(route) {
ctrl.router = this.$router;
}
this.goToDetails = function(id) {
ctrl.$router.navigate(['Details', {id: id}])
}
}
})
.component('detail', {
template: 'Details: <a ng-link="[\'List\']">Go Back</a>'
})
.component('noDetails', {
template: '' //just empty template
})
访问父级:
此外,为了能够通知父级(在您的示例中 - 兄弟 Detail 组件将其 ID 告知列表,然后列表将其标记为已选择),您可以使用require组件选项,以便能够访问父组件范围。
.component('detail', {
template: 'Details: <a ng-link="[\'List\']">Go Back</a>',
require: {
parent: '^list'
},
controller: {
this.goBackWithNotify = function(data) {
ctrl.parent.someParentComponentProperty = data;
}
}
})
用示例编辑plunker 。
PS:我使用了更新版本的路由器。