• Ng-Alain-mock 运用


    Ng-Alain

    Ng-Alian 是基于 Antd 实现的一个前端框架。它基于 AngularNG-ZORRO,在此基础上进行进一步封装,是中后台的前端解决方案,为我们提供更多通用性业务模块,让我们更加专注于业务。

    在前后端分离开发的场景中,可能已经约定好了数据结构,API 具体的业务逻辑还没写,前端开发常常会使用到假数据,来保证前端开发不会受阻。等到 API 定义好后才真实的发起请求。

    假数据可以实现一些测试的能力,例如“页面格式问题测试”,“边界测试”,“错误返回测试”等。

    Mock 数据是模拟数据,假数据。

    Ng-Alain Mock

    Ng-Alain Mock 解决了一些痛点,无疑是使用 Ng-Alain 框架使用得最频繁的功能之一了。

    Ng-Alain Mock 支持 GET(如获取列表详情)、POST(如新增项目)、PUT(如修改项目)、DELETE(如删除项目)请求
    只需要简单的配置,就可以实现模拟请求,并返回数据。但是它不会真的发起 Http 请求。

    Angular 项目中使用 Ng-Alain Mock

    要使用 Ng-Alain 首先需要先安装依赖包。

    1. 安装 Mock 依赖包,参见官网安装方法

    2. 在项目根目录下新建 _mock 目录,新建 task.ts 填充假数据,新建 index.ts 文件用来导出模拟数据文件,并导出 task.ts

    _task.ts
    
    export const TASK = {
      'GET /tasks': [
        {
          create_time: '2019-12-10 17:54:53',
          desc: 'test-1',
          id: 1,
          last_update_time: '2019-12-10 17:54:53',
          task_name: 'test-1'
        },
        {
          create_time: '2019-12-10 17:55:53',
          desc: 'test-2',
          id: 2,
          last_update_time: '2019-12-10 17:55:53',
          task_name: 'test-2'
        }
      ],
      '/tasks/1': {
        create_time: '2019-12-10 17:54:53',
        desc: 'test-1',
        id: 1,
        last_update_time: '2019-12-10 17:54:53',
        task_name: 'test-1'
      },
      'POST /tasks': {
        message: '任务创建成功'
      },
      'PUT /tasks/1': {
        message: '任务修改成功'
      },
      'DELETE /tasks/1': {
        message: '任务删除成功'
      },
    };
    
    1. 新建 task 组件用于测试。组件关键代码:
    <div>
      <nz-card nzTitle="任务管理">
        <nz-row [nzGutter]="8">
          <button nz-button (click)="createMock()" [nzType]="'primary'">
            <i class="anticon anticon-plus"></i>模拟新建任务
          </button>
        </nz-row>
      </nz-card>
    
      <nz-card>
        <nz-table
          #nzTable
          nzShowSizeChanger
          [nzData]="_dataSet"
        >
          <thead>
            <tr>
              <th>任务ID</th>
              <th>任务名称</th>
              <th>备注说明</th>
              <th>更新时间</th>
              <th>操作</th>
            </tr>
          </thead>
          <tbody>
            <tr *ngFor="let item of nzTable.data">
              <td>{{ item.id }}</td>
              <td>{{ item.task_name }}</td>
              <td>{{ item.desc }}</td>
              <td>{{ item.last_update_time }}</td>
              <td>
                <a (click)="viewMock(item)">模拟查看任务详情</a>
                <nz-divider nzType="vertical"></nz-divider>
                <a (click)="editMock(item)">模拟编辑任务</a>
                <nz-divider nzType="vertical"></nz-divider>
                <a nz-popconfirm nzTitle="是否删除该任务?" (nzOnConfirm)="deleteMock(item)"
                >模拟删除任务</a
                >
              </td>
            </tr>
          </tbody>
        </nz-table>
      </nz-card>
    </div>
    
    1. task 组件中从 @delon/theme 中 导入 _HttpClient 服务。
    import { _HttpClient } from '@delon/theme';
    

    并将服务注入。

      ngOnInit() {
        this.getMocks();
      }
    
      getMocks() {
        this._http.get('/tasks').subscribe(
          res => {
            this._dataSet = res;
          },
          error => {
            this.msg.error('获取模拟任务列表失败');
          }
        );
      }
    
      createMock() {
        this._http.post('/tasks').subscribe(
          res => {
            this.msg.success(res.message);
          },
          error => {
            this.msg.error('新建模拟任务失败');
          }
        );
      }
    
      viewMock(item) {
        const viewModal = this.modalService.create({
          nzTitle: `查看任务"${item.task_name}"详情`,
          nzComponentParams: {
            item: item,
          },
          nzContent: ViewComponent
        });
      }
    
      editMock(item) {
        this._http.put(`/tasks/${item.id}`).subscribe(
          res => {
            this.msg.success(res.message);
          },
          error => {
            this.msg.error('编辑模拟任务失败');
          }
        );
      }
    
      deleteMock(item) {
        this._http.delete(`/tasks/${item.id}`).subscribe(
          res => {
            this.msg.success(res.message);
          },
          error => {
            this.msg.error('删除模拟任务失败');
          }
        );
      }
    

    task组件页面

    1. 测试

    以点击"模拟新建任务"按钮为例,浏览器 network 中没有发起请求,console 控制台有 'POST /tasks' 的请求和响应信息。

    'POST /tasks' 的请求和响应信息

    这样,我们就没有真的发起 http 请求,也实现了业务逻辑。如果数据结构按照约定的规范编写,等到 API 准备好了,注释掉 _mock 目录下 index.ts 导出的 _task.ts 文件即可,发起真正的请求。

  • 相关阅读:
    Oracle存储过程和自定义函数笔记
    怎样将一个Long类型的数据转换成字节数组
    Java集合框架整理
    有了这些,java IO就不愁了
    java生成Excel文件,下载
    ajax使用
    java transient关键字
    Mysql乐观锁与悲观锁
    Spring(六)Spring执行流程
    Spring(五)AOP
  • 原文地址:https://www.cnblogs.com/xinjie-just/p/12019878.html
Copyright © 2020-2023  润新知