跳转到内容

Ant Design Vue入门

来自代码酷

Ant Design Vue入门[编辑 | 编辑源代码]

介绍[编辑 | 编辑源代码]

Ant Design Vue 是基于 Vue.js 的企业级 UI 组件库,是 Ant Design 的 Vue 实现版本。它为开发者提供了一套高质量、可复用的组件,帮助快速构建现代化的 Web 应用界面。Ant Design Vue 遵循 Ant Design 的设计规范,支持 Vue 2 和 Vue 3,并提供了丰富的主题定制和国际化支持。

Ant Design Vue 的主要特点包括:

  • 丰富的组件库(如按钮、表单、表格、弹窗等)
  • 响应式设计,适配多种设备
  • 主题定制能力
  • 国际化支持
  • 良好的 TypeScript 支持
  • 详细的文档和示例

安装[编辑 | 编辑源代码]

要开始使用 Ant Design Vue,首先需要安装它。以下是安装步骤:

Vue 2 项目[编辑 | 编辑源代码]

# 使用 npm 安装
npm install ant-design-vue@2.x --save

# 使用 yarn 安装
yarn add ant-design-vue@2.x

Vue 3 项目[编辑 | 编辑源代码]

# 使用 npm 安装
npm install ant-design-vue@next --save

# 使用 yarn 安装
yarn add ant-design-vue@next

基本使用[编辑 | 编辑源代码]

安装完成后,你可以在项目中引入 Ant Design Vue 组件。以下是两种引入方式:

完整引入[编辑 | 编辑源代码]

import { createApp } from 'vue'
import Antd from 'ant-design-vue'
import 'ant-design-vue/dist/antd.css'
import App from './App.vue'

const app = createApp(App)
app.use(Antd)
app.mount('#app')

按需引入[编辑 | 编辑源代码]

推荐使用按需引入以减少打包体积:

import { Button, message } from 'ant-design-vue'
import 'ant-design-vue/es/button/style/css' // 或者使用 less/scss

export default {
  components: {
    'a-button': Button
  },
  methods: {
    showMessage() {
      message.success('操作成功')
    }
  }
}

核心组件示例[编辑 | 编辑源代码]

下面介绍几个常用的 Ant Design Vue 组件及其用法。

按钮 (Button)[编辑 | 编辑源代码]

<template>
  <div>
    <a-button type="primary">主要按钮</a-button>
    <a-button type="dashed">虚线按钮</a-button>
    <a-button type="danger">危险按钮</a-button>
    <a-button type="link">链接按钮</a-button>
  </div>
</template>

表单 (Form)[编辑 | 编辑源代码]

<template>
  <a-form :model="formState" @finish="onFinish">
    <a-form-item label="用户名" name="username">
      <a-input v-model:value="formState.username" />
    </a-form-item>
    <a-form-item label="密码" name="password">
      <a-input-password v-model:value="formState.password" />
    </a-form-item>
    <a-form-item>
      <a-button type="primary" html-type="submit">提交</a-button>
    </a-form-item>
  </a-form>
</template>

<script>
import { reactive } from 'vue'

export default {
  setup() {
    const formState = reactive({
      username: '',
      password: ''
    })

    const onFinish = values => {
      console.log('表单数据:', values)
    }

    return {
      formState,
      onFinish
    }
  }
}
</script>

表格 (Table)[编辑 | 编辑源代码]

<template>
  <a-table :columns="columns" :dataSource="data" />
</template>

<script>
export default {
  data() {
    return {
      columns: [
        {
          title: '姓名',
          dataIndex: 'name',
          key: 'name'
        },
        {
          title: '年龄',
          dataIndex: 'age',
          key: 'age'
        },
        {
          title: '地址',
          dataIndex: 'address',
          key: 'address'
        }
      ],
      data: [
        {
          key: '1',
          name: '张三',
          age: 32,
          address: '北京市朝阳区'
        },
        {
          key: '2',
          name: '李四',
          age: 42,
          address: '上海市浦东新区'
        }
      ]
    }
  }
}
</script>

主题定制[编辑 | 编辑源代码]

Ant Design Vue 支持通过 less 变量进行主题定制。首先确保你的项目支持 less:

npm install less less-loader --save-dev

然后在项目中创建一个 `theme.less` 文件:

@primary-color: #1890ff; // 全局主色
@link-color: #1890ff; // 链接色
@success-color: #52c41a; // 成功色
@warning-color: #faad14; // 警告色
@error-color: #f5222d; // 错误色
@font-size-base: 14px; // 主字号

在 Vue CLI 项目中配置:

// vue.config.js
module.exports = {
  css: {
    loaderOptions: {
      less: {
        lessOptions: {
          modifyVars: {
            'primary-color': '#1DA57A',
            'link-color': '#1DA57A',
            'border-radius-base': '2px'
          },
          javascriptEnabled: true
        }
      }
    }
  }
}

国际化[编辑 | 编辑源代码]

Ant Design Vue 支持多语言。要使用国际化功能:

import { createApp } from 'vue'
import Antd from 'ant-design-vue'
import enUS from 'ant-design-vue/es/locale/en_US'
import zhCN from 'ant-design-vue/es/locale/zh_CN'
import 'ant-design-vue/dist/antd.css'

const app = createApp(App)
app.use(Antd, {
  locale: zhCN // 设置为中文
})
app.mount('#app')

实际应用案例[编辑 | 编辑源代码]

以下是一个简单的用户管理系统的实现示例:

<template>
  <div class="user-management">
    <a-card title="用户管理">
      <a-button type="primary" @click="showModal">添加用户</a-button>
      <a-table 
        :columns="columns" 
        :dataSource="users" 
        :pagination="pagination"
        @change="handleTableChange"
      >
        <template #action="{ record }">
          <a-button type="link" @click="editUser(record)">编辑</a-button>
          <a-button type="link" danger @click="deleteUser(record)">删除</a-button>
        </template>
      </a-table>
    </a-card>

    <a-modal 
      v-model:visible="visible" 
      :title="isEdit ? '编辑用户' : '添加用户'"
      @ok="handleOk"
    >
      <a-form :model="formState" layout="vertical">
        <a-form-item label="用户名">
          <a-input v-model:value="formState.username" />
        </a-form-item>
        <a-form-item label="邮箱">
          <a-input v-model:value="formState.email" />
        </a-form-item>
        <a-form-item label="角色">
          <a-select v-model:value="formState.role">
            <a-select-option value="admin">管理员</a-select-option>
            <a-select-option value="user">普通用户</a-select-option>
          </a-select>
        </a-form-item>
      </a-form>
    </a-modal>
  </div>
</template>

<script>
import { reactive, ref } from 'vue'
import { message } from 'ant-design-vue'

export default {
  setup() {
    const columns = [
      { title: '用户名', dataIndex: 'username', key: 'username' },
      { title: '邮箱', dataIndex: 'email', key: 'email' },
      { title: '角色', dataIndex: 'role', key: 'role' },
      { title: '操作', key: 'action', slots: { customRender: 'action' } }
    ]

    const users = reactive([
      { key: '1', username: 'admin', email: 'admin@example.com', role: 'admin' },
      { key: '2', username: 'user1', email: 'user1@example.com', role: 'user' }
    ])

    const visible = ref(false)
    const isEdit = ref(false)
    const currentId = ref(null)
    const formState = reactive({
      username: '',
      email: '',
      role: 'user'
    })

    const showModal = () => {
      visible.value = true
      isEdit.value = false
      Object.keys(formState).forEach(key => {
        formState[key] = ''
      })
      formState.role = 'user'
    }

    const editUser = (record) => {
      visible.value = true
      isEdit.value = true
      currentId.value = record.key
      Object.keys(formState).forEach(key => {
        formState[key] = record[key]
      })
    }

    const handleOk = () => {
      if (isEdit.value) {
        // 更新逻辑
        const index = users.findIndex(user => user.key === currentId.value)
        if (index !== -1) {
          users[index] = { ...formState, key: currentId.value }
        }
        message.success('用户更新成功')
      } else {
        // 添加逻辑
        users.push({
          ...formState,
          key: Date.now().toString()
        })
        message.success('用户添加成功')
      }
      visible.value = false
    }

    const deleteUser = (record) => {
      const index = users.findIndex(user => user.key === record.key)
      if (index !== -1) {
        users.splice(index, 1)
        message.success('用户删除成功')
      }
    }

    return {
      columns,
      users,
      visible,
      isEdit,
      formState,
      showModal,
      editUser,
      handleOk,
      deleteUser
    }
  }
}
</script>

最佳实践[编辑 | 编辑源代码]

1. **按需引入**:为了优化性能,建议按需引入组件而不是完整引入 2. **表单验证**:充分利用 Ant Design Vue 的表单验证功能 3. **响应式设计**:确保你的应用在不同设备上都能良好显示 4. **主题定制**:尽早规划主题样式,避免后期大量修改 5. **国际化**:如果你的应用需要支持多语言,从一开始就考虑国际化

常见问题[编辑 | 编辑源代码]

样式不生效[编辑 | 编辑源代码]

确保你已经正确引入了 CSS 文件:

import 'ant-design-vue/dist/antd.css'

按需引入时报错[编辑 | 编辑源代码]

确保你安装了正确的 babel 插件:

npm install babel-plugin-import --save-dev

然后在 babel 配置中添加:

plugins: [
  [
    'import',
    {
      libraryName: 'ant-design-vue',
      libraryDirectory: 'es',
      style: 'css'
    }
  ]
]

表单双向绑定问题[编辑 | 编辑源代码]

在 Vue 3 中,使用 `v-model:value` 而不是 `v-model`:

<a-input v-model:value="formState.username" />

总结[编辑 | 编辑源代码]

Ant Design Vue 是一个功能强大、设计精美的 Vue UI 组件库,特别适合企业级应用开发。通过本文的介绍,你应该已经掌握了 Ant Design Vue 的基本使用方法、核心组件、主题定制和国际化等特性。随着 Vue 生态系统的不断发展,Ant Design Vue 也在持续更新,为开发者提供更好的开发体验。