使用Material MatDialog设置Angular 5确认对话框?

时间:2017-11-20 21:16:56

标签: angular angular-material

此设置显示成功,但不能从Postgres DB中删除项目。不使用确认设置时该服务可以正常工作,因此不是问题所在。确认设置将正确的memberId发送到服务,但我的代码静默失败,没有错误,只有成功结果没有真正的成功。 (请参阅console.log评论。)我怀疑.subscribe是在错误的地方,但没有找到它工作的地方。如果直接在

下,它不起作用
this.membersAdminService.deleteMember(memberId)

这项服务很好:

  public deleteMember(memberId):  Observable<any> {
    console.log('delete called', memberId);  // 12 or correct id with both examples below.
    return this.http
      .delete(this.baseUrl + '?ids=' + memberId, {headers: this.headers});
  }

此组件可以工作和删除成员:

public deleteMember(memberId) {
    this.membersAdminService.deleteMember(memberId)
      .subscribe(
        res => {
          this.success();
        },
        (err: HttpErrorResponse) => {
          console.log(err.error);
          console.log(err.message);
          this.handleError(err);
        }
      );
}

此代码不会删除,但表示在接受对话框中的确认删除选项后会执行此操作。它将正确的memberId发送到服务,但服务不对它执行任何操作。

public deleteMember(memberId) {
      // Call the confirm dialog component
      this.confirmService.confirm('Confirm Delete', 'This action is final. Gone forever!')
          .do(res => {if (res === true) {
                console.log('confirm res', res);  // true
                console.log('confirm member_id', memberId);  // 12
              this.membersAdminService.deleteMember(memberId);
          }})
          .subscribe(
              result => {
                console.log('success res: ', result); // true
                this.success();  // Success modal pops up.
              },
              (err: HttpErrorResponse) => {
                  console.log(err.error);  // nothing
                  console.log(err.message);  // nothing
                this.messagesService.openDialog('Error', 'Delete did not happen.');
              }
          );
}

有什么想法吗?后端在我的电脑上,所以我不认为我可以做一个Plunker。

确认服务:

import { Observable } from 'rxjs/Observable';
import { MatDialogRef, MatDialog } from '@angular/material';
import { Injectable } from '@angular/core';

import { ConfirmComponent } from './confirm.component';

@Injectable()
export class ConfirmService {

  private dialogRef: MatDialogRef<ConfirmComponent>;

  constructor(private dialog: MatDialog) { }

  public confirm(title: string, message: string): Observable<any> {
      console.log('confirmed called');
    this.dialogRef = this.dialog.open(ConfirmComponent);
    this.dialogRef.componentInstance.title = title;
    this.dialogRef.componentInstance.message = message;

    return this.dialogRef.afterClosed();

  }
}

1 个答案:

答案 0 :(得分:1)

我怀疑在有效版本中,订阅&#34;拉动&#34;删除操作(记住RxJS是懒惰的,不是急切的),而在不起作用的例子中,你在那个.do()里面,并没有把它的重量拉到说话。尝试使用flatMap()或switchMap()(我永远不会记住哪个是我的头顶)而不是.do(),看看是否有效。