zoukankan      html  css  js  c++  java
  • 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[])
        )
      }

    如果觉得本文对您有帮助~可以支付宝(左)或微信支持一下:


    看到小伙伴打赏时给我写一些鼓励的话,真的非常感动,谢谢你们。


    我开了个微信公众号(第三个二维码)用来分享自己的职场英语相关学习经验,感兴趣可以关注,我会不断更新~


    微信打赏微信公众号

  • 相关阅读:
    js实现快速排序(in-place)简述
    手把手原生js简单轮播图
    基于superagent 与 cheerio 的node简单爬虫
    浅谈HTTP事务的一个过程
    css小技巧
    DesignPatternPrinciple(设计模式原则)二
    DesignPatternPrinciple(设计模式原则)一
    Attribute(特性)与AOP
    Thread(线程)四
    Thread(线程)三
  • 原文地址:https://www.cnblogs.com/starof/p/14433966.html
Copyright © 2011-2022 走看看