angular - 执行不同组件的功能
问题描述
我开发了一个带有按钮的网格,允许我激活或不激活计时器。
在网格所在的主页上,当启动计时器(单击开始)时,计时器开始计时。
通过一项服务,我可以查明计时器是否已激活,并更改导航栏组件上的按钮状态。
如何暂停组件/家庭服务的计时器(执行pauseTimer函数),但在导航栏组件中。基本上,当在家中启动计时器时,我打算使用停止按钮但在导航栏组件上暂停同一个计时器。
有人能帮我吗?
代码
startTimer(userId:string) {
if (!this.timerForUsers[userId]) {
this.timerForUsers = {
...this.timerForUsers,
[userId]: {
currentState: 'start',
currentTime: 0,
initialTime: 0,
startTime: `${Date.now()}`
}
};
}
const currentUserTimer:TimerForUser = this.timerForUsers[userId];
clearInterval(currentUserTimer.interval);
currentUserTimer.startTime = `${Date.now()}`;
currentUserTimer.initialTime = currentUserTimer.currentTime;
currentUserTimer.interval = setInterval(() => {
this.timerForUsers = {
...this.timerForUsers,
[userId]: {
...this.timerForUsers[userId],
currentTime: this.timerForUsers[userId].currentTime + 1
}
};
}, 1000);
this.userID = userId;
currentUserTimer.currentState = 'start';
this.state = currentUserTimer.currentState;
localStorage.setItem('user_timers', JSON.stringify(this.timerForUsers));
}
pauseTimer(userId:string) {
const currentUserTimer:TimerForUser = this.timerForUsers[userId];
currentUserTimer.currentState = 'pause';
this.state = currentUserTimer.currentState;
clearInterval(currentUserTimer.interval);
currentUserTimer.interval = null;
currentUserTimer.initialTime = currentUserTimer.currentTime;
currentUserTimer.startTime = null;
localStorage.setItem('user_timers', JSON.stringify(this.timerForUsers));
currentUserTimer.currentTime = null;
}
gettimes() {
return this.userID;
}
getCurrentState() {
return this.state;
}
解决方案
如果我理解正确,您想停止计时器并更改导航栏组件中的按钮。结帐演示 希望它有帮助
我已经添加了
public timerAction:ReplaySubject<any> = new ReplaySubject(1);
并在 HomeComponent
pauseTimer(data) {
this.taskService.iduser = data.key.ID;
this.taskService.pauseTimer(data.key.ID);
this.taskService.timerAction.next(true);// added this
}
constructor(public taskService: TaskService) {
this.taskService.currentUserId.subscribe(x => {
this.userId = x;
this.startTimer();
});
// added this, a subscription that listens to change and triggers pausTimer if true.
this.taskService.timerAction.subscribe(response =>{
if(response)
this.pauseTimer();
})
}
推荐阅读
- scala - 找不到参数 c 的隐式值:anorm.Column[Float] Play Framework Scala
- php - 如何通过仅从表中获取唯一数据来仅在带有文本字段的 div 中显示数据?
- dart - 从本地数据库中检索数据并将其存储在对象列表中
- java - 使用 HALF_UP 舍入到最接近的值
- .htaccess - Htaccess 漂亮的 URL PHP HTML
- excel - 在多个工作簿中查找一个字符串,然后查找它旁边的单元格的值
- c# - 受保护的覆盖 IAsyncResult BeginExecute - 移植到 .net 核心
- javascript - 鉴于目标整个 div 不使用 jspdf 导出为 pdf?
- webpack - Webpack 在 watch 模式下覆盖 stats 数据
- r - 对 R 中的每个值变化进行排名