发表于: 2020-05-27 22:44:35

1 1772


今日完成

完成上下架 编辑及删除功能

并添加互动效果


明日计划

添加登出功能,

修改bug 并测试功能 

细节优化


成果展示

上下架 删除功能

编辑功能






●弹窗使用nz-zooro的模态框组件

import { NzModalService } from 'ng-zorro-antd/modal';

private modalService: NzModalService,

    

通过modalService创建模态框

通过modal.afterClose设置窗口关闭后的回调函数 setTimeOut设置定时销毁模态框

  // 弹窗
 success(): void {
    const modal = this.modalService.success({
      nzTitle: '操作成功',
      nzContent: '弹窗将在2s后关闭',
    })
    modal.afterClose.subscribe(() => this.ngOnInit())
    setTimeout(() => modal.destroy(), 2000)
  }






● 确认框的使用 以及编辑功能思路

    html  将id进行参数传递


<button
          class="btn btn-outline-primary btn-sm m-1"
          (click)="editArticle(articleList.id)"
            >

              编辑

</button>

<button

              class="btn btn-outline-primary btn-sm m-1"
              nz-popconfirm
              nzPopconfirmTitle="确定要删除吗?"   
              (nzOnConfirm)="deleConfirm(articleList.id)" //点击确认后执行的方法
              nzPopconfirmPlacement="left" //弹出框的方向
            >
              删除
</button>

ts

点击确认后执行service方法 

  // 删除  确认
  deleConfirm(id): void {
    console.log(id)
    this.articleService.delArticle(id)
      .subscribe(
        (res: any=> {
          if (res.code == 0) {
            this.success();
          } else {
            this.error();
          }
        })

  }

  //编辑Article
  editArticle(id) {
    this.articleService.getThisArticle(id)
      .subscribe(
        (res: any=> {
          if (res.code == 0) {
            // 将获取到的article数据存在servic
            this.articleService.oldArticleData = res.data.article;
            // 页面跳转
            this.router.navigate(['/article/detail']);
          }
        }
      )
  }


service 

 /* 删除 article */
  delArticle(id) {
    return this.http.delete('api/a/u/article/' + id)
  }


 /* 编辑 article */

editArticle() {

    // 数据转换
    let putData: string = '';
    for (let key in this.oldArticleData) {
      putData += key + '=' + this.oldArticleData[key] + '&';
    }

    return this.http.put('api/a/u/article/' + this.oldArticleData.id, putData, this.httpOptions)

  }


进入新增/编辑页面后 在ngOnInit生命钩子中加入判断条件

 ngOnInit(): void {
    if (this.articleService.oldArticleData) {
      // 遍历对象 将表单中属性对应的值替换为service中对应的属性值
      this.replaceValue(this.editInfo, this.articleService.oldArticleData);
    }
  }

通过对象遍历将双向绑定的表单数据设置为被保存在service中的被编辑article数据

  // 找出对象A、B相同的属性,并B中的属性值赋值给A
  replaceValue(ObjAObjB) {
    for (let keyA in ObjA) {
      for (let keyB in ObjB) {
        if (keyA == keyB) {
          ObjA[keyA] = ObjB[keyB] + ''
        }
      }
    }
  }

上线 存草稿按钮也添加判断条件切换为put请求  

并且将修改的数据同步至service

// 上线 存草稿 
  submitArticle(status) {
    this.editInfo.status = status;

    // 新增article
    if (!this.articleService.oldArticleData) {
      // post请求
      this.articleService.addArticle(this.editInfo)
        .subscribe((res: any=> {
          console.log(res)
          if (res.code == 0) {
            this.subSuccess();
          } else {
            this.subError();
          }
        })
    }
    // 修改article 
    else {
      // 合并数据 
      this.replaceValue(this.articleService.oldArticleData, this.editInfo)

      // put请求
      this.articleService.editArticle()
        .subscribe(
          (res: any=> {
            console.log(res)
            if (res.code == 0) {
              this.subSuccess();
            } else {
              this.subError();
            }
          }
        )
    }
  }



遇到的问题

同样的问题 发送的请求依然不能是json格式 醉了 ,搞得好麻烦,还需要进行数据格式转换

只能使用applicition/x-www-form-urlencoded

使用applicition/json格式 一直报错



遇到的问题

编辑页面双向绑定的数据被修改后 nz-select没有正常显示

原生select标签显示正常

原因

article对象中的type status等属性的属性值为number类型,而nz-select接受的是string类型 导致无法正常显示

解决办法

在进行遍历对象属性值进行赋值操作的时候 使用 +‘ ’  进行隐形转换,使number转换为string

 

遇到的问题

编辑完成后上线或存为草稿报错

原因

传参调用put请求时,参数为编辑页面的数据,

解决方法

再次调用replaceValue()方法 将编辑页面的数据与service的完整数据进行合并替换



遇到的问题

测试时发现重大BUG 暂未解决 明日查找原因

直接进入新增页面再返回后  分页器失效  刷新后正常




返回列表 返回列表
评论

    分享到