angular - 如何以不同的指定时间显示不同的组件?
问题描述
我有两个不同的 Angular 7 组件ProductComponent
,MemberComponent
我想用不同的时间来展示它们。例如,我扫描了一个条形码,该条形码是会员,然后它会显示MemberComponent
10 秒,而如果我扫描一个产品条形码,它将显示ProductComponent
30 秒。我怎样才能做到这一点?
我已经尝试在两个组件上使用 setTimeout 函数,指定时间间隔,但它似乎会影响其他组件。
当我扫描会员条码和扫描产品条码时,ProductComponent
仅显示 10 秒而不是 30 秒。
这是我的member.component.ts代码
ngOnInit() {
this.route.params.subscribe(params => {
this.barcode = params['id'];
this.loadMember();
setTimeout(() => {
this.router.navigate(['']);
}, 10000); // I wan't to display this component for 10 seconds
});
}
这是我的product.component.ts代码
ngOnInit() {
this.route.data.subscribe(result => {
this._json = result.json;
});
if (this._json == null) {
this.route.params.subscribe(params => {
this.barcode = params['id'];
if ( this.barcode === '' ) {
return;
} else {
this.loadProduct();
setTimeout(() => {
this.router.navigate(['']);
}, 30000); // I wan't to display this component for 30 seconds
}
});
}
解决方案
下面是一个显示/隐藏使用的工作示例ngIf
1. 创建项目
ng new project --routing
ng g c barcode
ng g c member
ng g c product
2. 添加带参数的路由
在app-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { BarcodeComponent } from './barcode/barcode.component';
const routes: Routes = [
{ path: 'barcode/:type/:id', component: BarcodeComponent },
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule {}
3. 使用ngIf将Product和Member组件添加到Barcode组件
在barcode.component.html
<app-product *ngIf="scanType == 'product'"></app-product>
<app-member *ngIf="scanType == 'member'"></app-member>
在barcode.component.ts
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-barcode',
templateUrl: './barcode.component.html',
styleUrls: ['./barcode.component.scss']
})
export class BarcodeComponent implements OnInit {
scanType: string = ""
constructor(
private route: ActivatedRoute
) {
this.route.params.subscribe(params => {
this.scanType = params['type'] || ''
let time = (params['type'] == "member") ? 10000 : 30000
setTimeout(()=> {
this.scanType = ""
}, time)
})
}
ngOnInit() {
}
}
4. 测试
你可以尝试导航到
/barcode/member/uid
或者
/barcode/product/pid
推荐阅读
- twitter-bootstrap - 当我将传单地图放在 Bootstrap 5 模态中时,它变得疯狂
- postgresql - 递归与分离表的性能
- javascript - 如何为 AWS DocumentClient javascript SDK 设置默认超时
- r - 从R中的列表中对矩阵元素进行替换采样
- visual-studio-code - 在 Windows 7 上的 VS Code 上打开表情符号选择器的快捷键不起作用
- javascript - 使用类在 svelte 上首次设置超时后应用程序崩溃
- timer - oidc-client addAccessTokenExpiring 定时器在哪里/如何设置?
- python - 是否可以让 SQL Alchemy 数据库模型指向不同模型的属性,这样当一个模型的数据发生变化时,另一个模型的数据也会发生变化?
- webpack - 缺少变量的 SCSS 的 Mixin Webpack 错误
- rust - 获取 rust 的商和余数 (DIVMOD) 的函数是什么?