如何开发在两个不同组件之间切换的angular7中的选项卡?
How to develop tabs in angular7 which switch among two different components?
我在 angular 7 项目中生成了三个不同的组件
ng g c mycomp1
ng g c mycomp2
ng g c mycomp3
现在我想在 mycop1
组件中开发一个选项卡,如下所示
通过单击“第一个”选项卡,它应该显示 HTML 或呈现来自同一组件的内容。
通过单击第二个选项卡,我需要从 mycomp2 组件(来自不同的组件)呈现内容,
与从 mycomp3 组件呈现所需的第三个选项卡类似。
请帮助我如何继续执行此操作,
谢谢
您可以拥有一个包含所有 3 个组件的容器,并向每个组件添加 ngIf
以决定是否显示它。
当然,您始终可以使用 Angular Material 标签:
https://material.angular.io/components/tabs/overview
我不使用 Angular Material 但您需要使用路由器导航到每个。
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [
{ path: '', loadChildren: './home/home.module#HomeModule' },
{ path: 'mycomp1', component: MyComp1Component },
{ path: 'mycomp2', component: MyComp2Component },
{ path: 'mycomp3', component: MyComp3Component }
];
假设我们有 4 个组件 (app.component、a.component、b.component、c.component)
查看下面的完整代码url
https://stackblitz.com/edit/angular-gerrxm
Html 文件:
<div class="tab">
<button class="tablinks" routerLink="/tab1">Tab 1</button>
<button class="tablinks" routerLink="/tab2">Tab 2</button>
<button class="tablinks" routerLink="/tab3">Tab 3</button>
</div>
Using router method in component
<div class="tab">
<button class="tablinks" (click)="setTab('tab1')">Tab 1</button>
<button class="tablinks" (click)="setTab('tab2')">Tab 2</button>
<button class="tablinks" (click)="setTab('tab3')">Tab 3</button>
</div>
<router-outlet></router-outlet>
TS 文件:
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
constructor(
private router: Router
) {}
setTab(tabname: string) {
this.router.navigate([`/${tabname}`]);
}
}
CSS :
body {font-family: Arial;}
/* Style the tab */
.tab {
overflow: hidden;
border: 1px solid #ccc;
background-color: #f1f1f1;
}
/* Style the buttons inside the tab */
.tab button {
background-color: inherit;
float: left;
border: none;
outline: none;
cursor: pointer;
padding: 14px 16px;
transition: 0.3s;
font-size: 17px;
}
/* Change background color of buttons on hover */
.tab button:hover {
background-color: #ddd;
}
/* Create an active/current tablink class */
.tab button.active {
background-color: #ccc;
}
/* Style the tab content */
.tabcontent {
display: block;
padding: 6px 12px;
border: 1px solid #ccc;
border-top: none;
}
我在 angular 7 项目中生成了三个不同的组件
ng g c mycomp1
ng g c mycomp2
ng g c mycomp3
现在我想在 mycop1
组件中开发一个选项卡,如下所示
通过单击“第一个”选项卡,它应该显示 HTML 或呈现来自同一组件的内容。
通过单击第二个选项卡,我需要从 mycomp2 组件(来自不同的组件)呈现内容,
与从 mycomp3 组件呈现所需的第三个选项卡类似。
请帮助我如何继续执行此操作,
谢谢
您可以拥有一个包含所有 3 个组件的容器,并向每个组件添加 ngIf
以决定是否显示它。
当然,您始终可以使用 Angular Material 标签: https://material.angular.io/components/tabs/overview
我不使用 Angular Material 但您需要使用路由器导航到每个。
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [
{ path: '', loadChildren: './home/home.module#HomeModule' },
{ path: 'mycomp1', component: MyComp1Component },
{ path: 'mycomp2', component: MyComp2Component },
{ path: 'mycomp3', component: MyComp3Component }
];
假设我们有 4 个组件 (app.component、a.component、b.component、c.component)
查看下面的完整代码url https://stackblitz.com/edit/angular-gerrxm
Html 文件:
<div class="tab">
<button class="tablinks" routerLink="/tab1">Tab 1</button>
<button class="tablinks" routerLink="/tab2">Tab 2</button>
<button class="tablinks" routerLink="/tab3">Tab 3</button>
</div>
Using router method in component
<div class="tab">
<button class="tablinks" (click)="setTab('tab1')">Tab 1</button>
<button class="tablinks" (click)="setTab('tab2')">Tab 2</button>
<button class="tablinks" (click)="setTab('tab3')">Tab 3</button>
</div>
<router-outlet></router-outlet>
TS 文件:
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
constructor(
private router: Router
) {}
setTab(tabname: string) {
this.router.navigate([`/${tabname}`]);
}
}
CSS :
body {font-family: Arial;}
/* Style the tab */
.tab {
overflow: hidden;
border: 1px solid #ccc;
background-color: #f1f1f1;
}
/* Style the buttons inside the tab */
.tab button {
background-color: inherit;
float: left;
border: none;
outline: none;
cursor: pointer;
padding: 14px 16px;
transition: 0.3s;
font-size: 17px;
}
/* Change background color of buttons on hover */
.tab button:hover {
background-color: #ddd;
}
/* Create an active/current tablink class */
.tab button.active {
background-color: #ccc;
}
/* Style the tab content */
.tabcontent {
display: block;
padding: 6px 12px;
border: 1px solid #ccc;
border-top: none;
}