此设置显示成功,但不能从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();
}
}
答案 0 :(得分:1)
我怀疑在有效版本中,订阅&#34;拉动&#34;删除操作(记住RxJS是懒惰的,不是急切的),而在不起作用的例子中,你在那个.do()里面,并没有把它的重量拉到说话。尝试使用flatMap()或switchMap()(我永远不会记住哪个是我的头顶)而不是.do(),看看是否有效。