2017-11-20 10 views
1

この設定は成功を示していますが、Postgres DBから項目を削除していません。確認セットアップを使用していないときにサービスが動作するので問題はありません。確認設定は正しいmemberIdをサービスに送信しますが、私のコードは黙って失敗しています。エラーはありません。 (console.logのコメントを参照してください)私はサブスクリプションが間違った場所にあるが、動作する場所が見つからないと思う。角度5 Material MatDialogでの確認ダイアログの設定?

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); 
     } 
    ); 
} 

このコードは削除されません直接

this.membersAdminService.deleteMember(memberId) 

の下でこれが正常に動作するサービスである場合、それは動作しません。ダイアログで削除の確認オプションを受け入れた後に実行されます。正しい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(); 

    } 
} 
+0

this.confirmService.confirmのコードは、()のように何を求めていますか? –

+0

そのコードMarcelを追加しました。うまくいくようです。確認が受け入れられた後、コンポーネントコードはMemberAdminServiceにmemberIdを送信して削除します。その後、問題と思われる。 – Preston

答えて

1

私は、購読作品のバージョンでは「引っ張る」ことを疑うdoesnの例では、一方(RxJSは熱心、怠け者ではないことを覚えている)に沿って削除操作あなたはその中にいます。それは体重を引っ張って話すことではありません。 .do()の代わりにflatMap()またはswitchMap()を試してみてください。

+1

switchMapしました!私はリターンを追加する必要がありました:.switchMap(RES => {場合(RESが===真){ リターンthis.membersAdminService.deleteMember(MEMBERID); – Preston

+1

私はすべてのRxJS事業者が新たに観測可能に作成されたと思ったいくつかの理由.doという。それでは、私は、 – Preston

関連する問題