gpt4 book ai didi

javascript - Angular 1.5 组件路由器兄弟组件

转载 作者:行者123 更新时间:2023-11-30 00:08:46 25 4
gpt4 key购买 nike

Angular 1.5 的新组件路由器是否有办法让兄弟组件在 ng-outlet 指令中呈现?我想与兄弟 ListView 并行显示详细信息 View 。据我了解官方文档(https://docs.angularjs.org/guide/component-router)应该可以使用 $$router 并将其绑定(bind)到子组件。

这是我尝试做的: http://plnkr.co/edit/KzW8fLAxrte9jSg5jhEg?p=preview

<ng-outlet><crisis-detail $router="$$router"></crisis-detail>

关于这个有约束力的主题,我有一篇类似的帖子:

Angular 1.5 component $router binding

最佳答案

据我所知,Angular 1.5 Component Router 无法同时显示 sibling 。

但是,解决方法是让同级成为实际的子级,然后使用空组件以默认的“无详细信息”路由显示。

解决方法:

首先,我们需要一些根组件来激活列表本身:

.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 告诉 List,然后 List 将其标记为已选中)您可以使用 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:我用的是更新版本的路由器。

关于javascript - Angular 1.5 组件路由器兄弟组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37374583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com