代码之家  ›  专栏  ›  技术社区  ›  Blake Rivell

在组件中调用函数时,角度服务未按预期工作

  •  0
  • Blake Rivell  · 技术社区  · 6 年前

    调用deleteProject时,将出现confirm对话框,但如果用户单击cancel,则好像他们单击OK,代码意外地进入if语句(console中没有错误)。如果我将If语句中的服务调用替换为window.confirm('是否确实要删除此租户?')它直接在组件中按预期工作。

    一定有一个教训,我需要学习使用角度单例服务。

    @Injectable()
    export class DialogService {
      confirm(message?: string): Observable<boolean> {
        const confirmation = window.confirm(message || 'Is it OK?');
    
        return of(confirmation);
      }
    }
    

    删除组件中的函数:

    deleteProject(id: number) {
        if (this.dialogService.confirm('Are you sure you want to delete this project?')) {
          this.projectService.deleteProject(id).subscribe(() => {
            this.projects.forEach((cur, index) => {
              if (id === cur.id) {
                this.projects.splice(index, 1);
              }
            });
          });
        }
      }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Suren Srapyan    6 年前

    因为结果是可以观察到的 subscribe dialogService.confirm if 陈述。然后你可以 如果 of(confirmation)

    你也可以改变 delete 条件有点

    this.dialogService.confirm('Are you sure you want to delete this project?').subscribe(isConfirmed => {
    
       if(isConfirmed) {
          this.projectService.deleteProject(id).subscribe(() => {
            const index = this.projects.findIndex(item => item.id === id);
            index !== -1 && this.projects.splice(index, 1);
          });
       }
    
    })