<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Angular項目TaskList service

      增刪改查跟ProjectService很像

      import { TaskList } from './../domain';
      import { HttpClient } from '@angular/common/http';
      import { Inject, Injectable } from '@angular/core';
      import { count, map, mapTo, mergeMap, switchMap } from 'rxjs/operators';
      import { from, Observable } from 'rxjs';
      
      @Injectable({
        providedIn: 'root'
      })
      export class TaskListService {
        private readonly domain = 'TaskLists';
        private headers = new Headers({
          'Content-type': 'application/json'
        });
        constructor(private httpClient: HttpClient, @Inject('BASE_CONFIG') private config: any) { }
      
        //POST
        add(TaskList: TaskList): Observable<TaskList> {
          TaskList.id = undefined;
          const uri = `${this.config.uri}/${this.domain}`;
          return this.httpClient.post(uri, JSON.stringify(TaskList)).pipe(
            map(res => res as TaskList)
          )
        }
      
        //PUT/patch
        update(TaskList: TaskList): Observable<TaskList> {
          const uri = `${this.config.uri}/${this.domain}/${TaskList.id}`;
          const toUpdate = {
            name: TaskList.name //只更新name
          }
          return this.httpClient.patch(uri, JSON.stringify(toUpdate)).pipe(
            map(res => res as TaskList)
          )
        }
      
        //DELETE
        delete(taskList: TaskList): Observable<TaskList> {
          const uri = `${this.config.uri}/${this.domain}/${taskList.id}`;
          return this.httpClient.delete(uri).pipe(
            mapTo(taskList)
          )
        }
      
        //GET
        get(projectId: string): Observable<TaskList[]> {
          const uri = `${this.config.uri}/${this.domain}`;
          return this.httpClient.
          get(uri, { params: { 'projectId': projectId } })
          .pipe(
            map(res => res as TaskList[])
          )
        }
      
      
      
      }

      需要添加一個存儲TaskList順序,通過拖拽交換2個List的順序。通過Patch更新Order。

      也就是要監聽兩個流merge和concat都行,一個事件流更新drag order,一個事件流更新drop order。

      希望這兩個流先后更新之后再把得到的task list流返回,做一個reduce操作。

       

      //拖拽交換兩個List順序
        swapOrder(src: TaskList, target: TaskList): Observable<TaskList[]> {
          //拖拽的原始uri
          const dragUri = `${this.config.uri}/${this.domain}/${src.id}`;
          const dropUri = `${this.config.uri}/${this.domain}/${src.id}`;
          const drag$ = this.httpClient
            .patch(dragUri, JSON.stringify({ order: target.order }), { headers: this.headers })
            .pipe(map(res => res as TaskList));
          const drop$ = this.httpClient
            .patch(dragUri, JSON.stringify({ order: src.order }), { headers: this.headers })
            .pipe(map(res => res as TaskList));
          return concat(drag$, drop$)
            .pipe(reduce((r: TaskList[], list) => [...r, list], []));
        }

       

      posted @ 2021-02-24 06:29  starof  閱讀(104)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产欧美日韩精品丝袜高跟鞋| 国内自拍小视频在线看| 不卡乱辈伦在线看中文字幕 | 久久一日本道色综合久久| 玛沁县| 欧美成人午夜性视频| 中文字幕精品亚洲字幕成| 超清无码一区二区三区| 久久这里只精品热免费99| 国产一区二区在线观看粉嫩| 国产精品久久欧美久久一区| 最新亚洲人成网站在线影院| 波多野结衣久久一区二区| 丰满人妻跪趴高撅肥臀| 亚洲成人av综合一区| 国产三级精品片| 亚洲欧洲日产国无高清码图片| 精品国产中文字幕av| 中文字幕午夜福利片午夜福利片97| 国产99久久亚洲综合精品西瓜tv| 最新亚洲人成网站在线影院| 嵊州市| 亚洲欧美日韩国产精品一区二区| 久久老熟女一区二区蜜臀| 五月综合网亚洲乱妇久久| 精品视频在线观自拍自拍| 麻豆精品一区二区综合av| 日韩一欧美内射在线观看| 久久精品夜夜夜夜夜久久| 麻花传媒在线观看免费| 亚洲av熟女国产一二三| 人妻在线中文字幕| 亚洲精品成人区在线观看| 无码人妻丰满熟妇啪啪网不卡 | 欧美亚洲一区二区三区在线| 国产激情av一区二区三区| 草草浮力影院| 中文字幕一区二区久久综合| 国产99在线 | 免费| 麻豆国产传媒精品视频| 日韩精品一区二区三区四|