Angular项目Project Service
建立领域对象并在domain中建立一个index.ts用于组织文件。在index.ts中导出所有的领域对象。
1,新建project.service,加add方法。
import { Project } from './../domain'; import { HttpClient } from '@angular/common/http'; import { Inject, Injectable } from '@angular/core'; import { map } from 'rxjs/operators'; @Injectable({ providedIn: 'root' }) export class ProjectService { private readonly domain = 'projects'; private headers = new Headers({ 'Content-type': 'application/json' }); constructor(private httpClient: HttpClient, @Inject('BASE_CONFIG') private config: any) { } //POST add(project: Project) { project.id = undefined; const uri = `${this.config.uri}/${this.domain}`; return this.httpClient.post(uri, JSON.stringify(project)).pipe( map(res => res as Project) ) } }
2,加更新方法
PUT会全部更新,patch只更新部分属性。不要图方便去做方法范围之外的更新。用一个toUpdate指定只更新这3个属性。
//PUT/patch update(project: Project): Observable<Project> { const uri = `${this.config.uri}/${this.domain}/${project.id}`; const toUpdate = { name: project.name, desc: project.desc, coverImg: project.coverImg } return this.httpClient.patch(uri, JSON.stringify(toUpdate)).pipe( map(res => res as Project) ) }
3,删除
project是一个顶级元素,级联删除。删除一个project需要删除Project,project关联的所有列表task-list和列表下面的所有任务task。
json-server会级联删除,所以我们删除列表和它下面的tasks。
从taskLists数组中得到Observable流。
//DELETE delete(project: Project): Observable<Project> { const delTasks$ = from(project.taskLists ? project.taskLists : []).pipe( mergeMap(listId => this.httpClient.delete(`${this.config.uri}/taskLists/${listId}`)), count() ); const uri = `${this.config.uri}/${this.domain}/${project.id}`; return delTasks$.pipe( switchMap(_ => this.httpClient.delete(uri).pipe( mapTo(project) )) ) }
4,get
//GET get(userId: string): Observable<Project[]> { const uri = `${this.config.uri}/${this.domain}`; return this.httpClient.get(uri, { params: { 'members_like': userId } }).pipe( map(res => res as Project[]) ) }
如果觉得本文对您有帮助~可以
微信支持一下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
2017-02-23 document.createDocumentFragment()运行效率