AntDesignVue (2) | 青训营笔记

168 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第3天

布局

栅格系统

支持Flex布局

a-row a-col(列)

  • 所有列必须放在row内,col的最外面一定要有一个row,col里面可以套另外的col
  • 栅格系统中的列是指 1 到 24 的值来表示其跨越的范围。例如,三个等宽的列可以使用 `` 来创建
  • 如果一个row中的col总和超过 24,那么多余的col会作为一个整体另起一行排列
<a-row>
    <a-col :span="8">col-8</a-col>
    <a-col :span="8">col-8</a-col>
    <a-col :span="8">col-8</a-col>
  </a-row>

API

Row

成员说明类型默认值
alignflex 布局下的垂直对齐方式:top middle bottomstringtop
gutter栅格间隔,可以写成像素值或支持响应式的对象写法来设置水平间隔 { xs: 8, sm: 16, md: 24}。或者使用数组形式同时设置 [水平间距, 垂直间距]1.5.0 后支持)。number/object/array0
justifyflex 布局下的水平排列方式:start end center space-around space-betweenstringstart
wrap是否自动换行booleanfalse

Col

成员说明类型默认值
flexflex 布局填充stringnumber-
offset栅格左侧的间隔格数,间隔内不可以有栅格number0

响应式栅格

| xs | <576px 响应式栅格,可为栅格数或一个包含其他属性的对象 | number|object | - | | --- | --------------------------------- | -------------- | - | | sm | ≥576px 响应式栅格,可为栅格数或一个包含其他属性的对象 | number|object | - | | md | ≥768px 响应式栅格,可为栅格数或一个包含其他属性的对象 | number|object | - | | lg | ≥992px 响应式栅格,可为栅格数或一个包含其他属性的对象 | number|object | - | | xl | ≥1200px 响应式栅格,可为栅格数或一个包含其他属性的对象 | number|object | - | | xxl | ≥1600px 响应式栅格,可为栅格数或一个包含其他属性的对象 | number|object | - |

例子:

{ xs: 8, sm: 16, md: 24, lg: 32 }

表格的使用

消息提示

Modal对话框,除了可以使用a-modal以外,还可以使用Modal.method()这个方法

对应的具体属性:

参数功能类型默认值
title标题string & VNode & function(h)
centered垂直居中显示booleanfalse
okText确认按钮文字string & slot确定
content内容string & VNode & function(h)

举例

/**
   * 分别用于提示以下信息:
   * tips:轻提示,默认3秒后消息
   * Info:基本提示信息
   * Success:成功提示信息
   * Warning:警告提示信息
   * Error:错误提示信息
   * @param content 要显示的提示内容
   * @param timeout 延迟关闭提示框的秒数,为0则不关闭
   * @returns  void
   */public info(content: string, timeout = 0) {
    const model = Modal.info({
      title: () => '温馨提示',  //这也是一个函数,返回的就是普通的String类型
      centered: true,   //居中
      okText: '确定',   //确定的文字
      content: () => h('div', {}, [h('p', content)]),  //用h函数返回一个VNode节点
    });
    if (timeout > 0) {
      setTimeout(() => {
        model.destroy();
      }, timeout * 1000);
    }
  }

组件:

封装好的组件,使用的时候直接用暴露出的useDycMessageBox()函数创建一个

const messageBox=useDycMessageBox()
​
messageBox.error( res.errMsg , 3 );
/**
 * 封装常用的用于提示用户的消息类
 * @author www.glm2m.com
 */
import { message, Modal } from 'ant-design-vue';
import { h, createVNode } from 'vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
​
export class DycMessageBox {
  /**
   * 分别用于提示以下信息:
   * tips:轻提示,默认3秒后消息
   * Info:基本提示信息
   * Success:成功提示信息
   * Warning:警告提示信息
   * Error:错误提示信息
   * @param content 要显示的提示内容
   * @param timeout 延迟关闭提示框的秒数,为0则不关闭
   * @returns  void
   */
  public tips(content: string) {
    message.info(content);
  }
​
  public info(content: string, timeout = 0) {
    const model = Modal.info({
      title: () => '温馨提示',
      centered: true,
      okText: '确定',
      content: () => h('div', {}, [h('p', content)]),
    });
    if (timeout > 0) {
      setTimeout(() => {
        model.destroy();
      }, timeout * 1000);
    }
  }
​
  public success(content: string, timeout = 0) {
    const model = Modal.success({
      title: () => '温馨提示',
      centered: true,
      okText: '确定',
      content: () => h('div', {}, [h('p', content)]),
    });
    if (timeout > 0) {
      setTimeout(() => {
        model.destroy();
      }, timeout * 1000);
    }
  }
​
  public error(content: string, timeout = 0) {
    const model = Modal.error({
      title: () => '温馨提示',
      centered: true,
      okText: '确定',
      content: () => h('div', {}, [h('p', content)]),
    });
    if (timeout > 0) {
      setTimeout(() => {
        model.destroy();
      }, timeout * 1000);
    }
  }
​
  public warning(content: string, timeout = 0) {
    const model = Modal.warning({
      title: () => '温馨提示',
      centered: true,
      okText: '确定',
      content: () => h('div', {}, [h('p', content)]),
    });
    if (timeout > 0) {
      setTimeout(() => {
        model.destroy();
      }, timeout * 1000);
    }
  }
​
  /**
   * 需要用户确认后再进行指定的操作
   * @public
   */
  public confirm(
    content: string,
    callbackOk: (...args: any[]) => any,
    callbackOnCancel: (...args: any[]) => any,
  ) {
    Modal.confirm({
      title: () => '温馨提示',
      centered: true,
      icon: () => createVNode(ExclamationCircleOutlined),
      content: () => content,
      onOk: callbackOk,
      onCancel: callbackOnCancel,
    });
  }
}
const messageBox = new DycMessageBox();
​
export function useDycMessageBox() {
  return messageBox;
}
​

页面内标签页

效果

image-20220803161844005

上面是标签页(a-tab),具体显示多少个标签通过读取时刻改变的数组来解决

每个标签上面的重新加载和叉号是标签的插槽,填上对应的效果即可

右键弹出菜单的功能也是slot带有的

\