返回

vue3.x + TypeScript + TSX 开发 Element-Plus 搜索组件(上)

前端

组件开发

1. 前期准备

  • 安装 Vue3.x、TypeScript、TSX 和 Element-Plus。
  • 创建一个 Vue3.x 项目。
  • 在项目中安装 Element-Plus。

2. 创建组件

  • 在项目中创建一个新的组件文件。
  • 将组件命名为 SearchComponent。
  • 在 SearchComponent 中,导入必要的依赖项。
  • 定义组件的 props。
  • 定义组件的 data。
  • 定义组件的 methods。
  • 定义组件的 template。

3. 使用组件

  • 在 App.vue 中,导入 SearchComponent。
  • 在 App.vue 中,注册 SearchComponent。
  • 在 App.vue 中,使用 SearchComponent。

4. 组件配置

  • 在 App.vue 中,创建一个 JSON Schema 对象。
  • 将 JSON Schema 对象作为 props 传递给 SearchComponent。

5. 组件样式

  • 在项目中创建一个新的样式文件。
  • 将样式文件命名为 SearchComponent.css。
  • 在 SearchComponent.css 中,定义组件的样式。

6. 运行组件

  • 运行 Vue3.x 项目。
  • 在浏览器中打开项目。
  • 查看组件是否正常工作。

示例代码

1. 组件代码

<template>
  <div class="search-component">
    <el-form :model="formData" :rules="rules" ref="form" label-width="80px">
      <el-form-item label="名称" prop="name">
        <el-input v-model="formData.name" placeholder="请输入名称" />
      </el-form-item>
      <el-form-item label="年龄" prop="age">
        <el-input v-model="formData.age" placeholder="请输入年龄" />
      </el-form-item>
      <el-form-item label="性别" prop="gender">
        <el-select v-model="formData.gender" placeholder="请选择性别">
          <el-option label="男" value="male" />
          <el-option label="女" value="female" />
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="onSubmit">提交</el-button>
        <el-button type="reset" @click="onReset">重置</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
import { defineComponent, reactive, ref } from 'vue';
import { Form } from 'element-plus';

export default defineComponent({
  name: 'SearchComponent',
  components: {
    [Form.name]: Form,
  },
  props: {
    schema: {
      type: Object,
      required: true,
    },
  },
  setup(props) {
    const formData = reactive({});
    const rules = {};
    const form = ref(null);

    const onSubmit = () => {
      form.value.validate((valid) => {
        if (valid) {
          // 提交表单
        }
      });
    };

    const onReset = () => {
      form.value.resetFields();
    };

    return {
      formData,
      rules,
      form,
      onSubmit,
      onReset,
    };
  },
});
</script>

<style>
.search-component {
  padding: 20px;
}
</style>

2. 使用代码

<template>
  <div>
    <search-component :schema="schema" />
  </div>
</template>

<script>
import { defineComponent, reactive } from 'vue';
import SearchComponent from './SearchComponent.vue';

export default defineComponent({
  name: 'App',
  components: {
    SearchComponent,
  },
  setup() {
    const schema = reactive({
      properties: {
        name: {
          type: 'string',
          title: '名称',
        },
        age: {
          type: 'number',
          title: '年龄',
        },
        gender: {
          type: 'string',
          title: '性别',
          enum: ['male', 'female'],
        },
      },
    });

    return {
      schema,
    };
  },
});
</script>
</#description>

**总结** 

本文介绍了如何使用 Vue3.x、TypeScript、TSX 和 Element-Plus 开发一个搜索组件。该组件通过以 JSON Schema 的方式传入配置项的 JSON,实现动态渲染的效果。文中详细介绍了搜索组件的开发步骤,并提供了可供参考的代码示例。