【发布时间】:2019-03-01 22:36:32
【问题描述】:
Delete 方法没有给我一个错误,因为我将 1000 作为参数传递,该参数不存在于“https://jsonplaceholder.typicode.com/posts”json 文档中。相反,它只是删除选定的文档。我到处搜索,但没有找到任何指定如何解决此问题的代码。任何帮助将不胜感激,因为我是 Angular 框架的新手。
以下是我的服务代码文件(post.service.ts)
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { catchError } from 'rxjs/operators';
import { Observable, throwError } from 'rxjs';
import { NotFoundError } from '../common/not-found-error';
import { AppError } from '../common/app-error';
import { BadInput } from '../common/bad-input';
// For handling Http Requests
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class PostService {
private url = 'https://jsonplaceholder.typicode.com/posts';
private userUrl = 'https://jsonplaceholder.typicode.com/users';
constructor(private http: HttpClient) {}
getPosts() {
return this.http.get(this.url);
}
deletePost(id) {
console.log('Service Id: ', id);
return this.http.delete(this.url + '/' + id)
.pipe(
catchError((error: HttpErrorResponse) => {
if (error.status === 404) {
console.log('You screwed');
return throwError(new NotFoundError());
}
return throwError(new AppError(error));
})
);
这是我的组件文件(post.component.ts)
deletePost(post) {
console.log('Post Id is: ', post.id);
this.service.deletePost(1000)
.subscribe(
response => {
let index = this.posts.indexOf(post);
this.posts.splice(index, 1);
console.log(response);
},
(error: AppError) => {
if (error instanceof NotFoundError) {
alert('This post has already been deleted');
} else {
alert('An Unexpected error occurred.');
console.log(error);
}
});
}
ngOnInit() {
this.service.getPosts()
.subscribe((response) => {
this.posts = response;
console.log('Posts: ', this.posts);
}, error => {
alert('An Unexpected error occurred.');
console.log(error);
});
}
这是我的 Component.html 文件(posts.component.html)
<ul class="list-group">
<li *ngFor="let post of posts" class="list-group-item">
<button (click)="deletePost(post)" class="btn btn-danger btn-sm">Delete</button>{{ post.title }}
</li>
</ul>
<br>
【问题讨论】:
-
您的服务工作正常吗?我不明白您的问题,“它只是删除选定的文档”是什么意思。 ?以及为什么将参数设置为“this.service.deletePost(1000)”,用于测试目的?我可以用 stackblitz 重现你的问题,我可以提供帮助。
-
是的,我的服务运行正常。 “它只是删除选定的文档”是指-当我尝试单击前端的删除按钮时,它会从前端删除该元素。相反,它应该抛出一个错误,说“这篇文章已经被删除”。 this.service.deletePost(1000) 用于测试目的,以确保它是否抛出错误。
-
这意味着您的 this.service.deletePost(1000) 操作成功(或),您的服务上的“catchError”属性有问题。 (post.service.ts)
-
是的。只是不知道是哪一部分出了问题。
-
我将与您分享我的服务,因此您可以使用它作为示例。给我一点时间。
标签: angular rest angular6 angular-httpclient