如何在新选项卡中打开 Angular 组件?



我有大量的数据要在屏幕上显示。我需要提供一个简化的列表,以便用户可以选择其中一个项目并查看其详细信息。

所以假设我有一个组件SimpleListComponent,它将保存数据并呈现一个简化的视图

export class SimpleListComponent{
@Input() data: any[];
}

目录

<ul>
<li *ngFor="let item of data">
<a>{{item.name}}</a>
</li>
</ul>

用户应该能够单击其中一个 itens,并在新选项卡中打开包含该项目详细信息的视图。 所以如果我有第二个组件

export class DetailedViewComponent{
@Input() item: any;
}
<div>
<!--All fields of item here-->
</div>

编辑:这里的问题是我正在呈现来自非常自定义搜索的数据,所以我没有ID从服务器获取详细信息或任何其他方式再次获取数据。因此,唯一的方法是以某种方式传递已加载的数据。

我怎样才能在角度中实现这一点?将项目数据提供给第二个组件并在新选项卡中打开它?

我知道这是一个旧帖子,但由于这是您搜索"如何在新选项卡/窗口中打开角度组件"时的第一个结果,我想发布一个答案。

如果为组件创建路由并在新选项卡中加载路由,则最终将再次引导应用程序。

因此,如果您想在不引导整个应用程序的情况下打开一个角度组件,您可以使用角度门户来完成。您还可以轻松地在父窗口和子窗口之间传递数据。

我最近有这个要求,我找不到任何关于此的全面资源,所以我整理了一篇关于它的文章。

https://medium.com/@saranya.thangaraj/open-angular-component-in-a-new-tab-without-bootstrapping-the-whole-app-again-e329af460e92?sk=21f3dd2f025657985b88d6c5134badfc

下面是示例应用的现场演示

https://stackblitz.com/edit/portal-simple

您可以为 DetailedViewComponent 和 " 创建路由

在您的路由中:

{
path: 'detailed/:id',
component: DetailedViewComponent
}

之后,在 SimpleListComponent 的 typeScript 上:

public detailedPath;
ngOnInit() {
this.detailedPath = window.location.origin + '/detailed/';
}

在 SimpleListComponent 的 HTML 上:

<ul>
<li *ngFor="let item of data">
<a href="{{detailedPath + item.id}}" target="_blank">
</li>
</ul>

在 DetailedViewComponent 的 TypeStript 上:

public id;
constructor(private routeParams: ActivatedRoute) {
}
ngOnInit() {
this.routeParams.params.subscribe(params => {
this.id = parseInt(params['id']);
});
//Some logic to get the details of this id
}

如果有人遇到我运行的相同问题:

我结束了使用本地存储来临时存储我的对象并从另一个窗口访问它。

所以代码最终是这样的:

<a target="_blank" [routerLink]="['/details', item.name]" click="passObject(item.name)">
passObject(i){
localStorage.setItem('i.name', JSON.stringify(i));
}

在详细信息组件中:

ngOnInit() {
this.item = JSON.parse(localStorage.getItem(param));
}

我可以尝试的另一个想法是实现消息服务

我建议您使用目标属性从HTML中执行此操作:

<a target="_blank" [routerLink]="['/detail',item.name]">

在此示例中,应在路由模块中定义"/item/:name"。

相关内容

  • 没有找到相关文章

最新更新