vue 下拉选是多选的,并且回显

下拉选最重要的就是:下拉选的所有选项放在一个变量,选中的选项放在一个变量。

先加载所有选项的数据,再加载选中选项的数据,并且要保证select下拉的ID和v-model里边的id保持一致。

第一、加载的顺序,应该先加载下拉框要选择的数据,然后在通过编辑查询数据后回显。

第二、要保证select下拉的ID和v-model里边的id保持一致。

第三、elementUI就会自动的将数据回显了。

代码:

<el-form-item label="选择学校">
            <Select v-model="user.school.id" value-key style="width:200px;"
                    @on-change="selectGradeAndEclass(user.school.id)">
              <Option v-for="item in userForm.schoolList" :value="item.id" :key="item.id" :label="item.name"></Option>
            </Select>
          </el-form-item>
          <el-form-item label="选择年级" value-key v-if="user.role.id == 6 || user.role.id == 7"> <!-- 多选 -->
            <Select v-model="user.gradeList" style="width:200px;" v-if="user.role.id == 6" multiple>
              <Option v-for="item in userForm.gradeList" :value="item.id" :key="item.id" :label="item.name"></Option>
            </Select>
            <Select v-model="user.gradeList" value-key style="width:200px;" v-if="user.role.id == 7">
              <Option v-for="item in userForm.gradeList" :value="item.id" :key="item.id" :label="item.name"></Option>
            </Select>
          </el-form-item>
          <el-form-item label="选择班级" value-key v-if="user.role.id == 8"> <!-- 多选 -->
            <Select v-model="user.eclassList" style="width:200px;" multiple>
              <Option v-for="item in userForm.eclassList" :value="item.id" :key="item.id">{{
                item.grade.name}}{{item.name}}
              </Option>
            </Select>
          </el-form-item>

 

export default {
    name: "manager",
    data() {
      return {
        //客户端用户相关变量开始
        userList: [],//客户端用户列表
        userquery: {//分页查询条件
          page: 1,
          limit: 10
        },
        userCount: 0,//分页总条数
        user: {//客户端用户
          id: null,//id
          username: null,//姓名
          phone: null,//手机号
          role: {},//角色
          school: {},//学校
          gradeList: [],//年级
          eclassList: [],//班级
          subjectList: []//科目
        },
        userForm: {
          roleList: [],
          schoolList: [],
          gradeList: [],
          eclassList: [],
          subject: []
        },
 // 编辑客户端用户
      editSaveUser(row) {
        let that = this;
        //初始化user
        this.user = JSON.parse(JSON.stringify(row));
        this.edituser = true;
        that.selectGradeEclass(row);
        that.selectSubject(row);
        this.disabled = true
      },
//根据学校选择年级和班级
      selectGradeEclass(row) {
        let that = this;
        let model = {
          'schoolId': row.school.id
        };
        eclass.listbyschool(model, res => {
          if (res.state) {
            that.userForm.eclassList = res.data.eClassList;
            that.userForm.gradeList = res.data.gradeList;
            if (row.gradeList != null && row.gradeList.length > 0) {
              for (let i = 0; i < row.gradeList.length; i++) {
                this.user.gradeList.push(row.gradeList[i].id);
              }
            }
            if (row.eclassList != null && row.eclassList.length > 0) {
              for (let i = 0; i < row.eclassList.length; i++) {
                this.user.eclassList.push(row.eclassList[i].id);
              }
            }
          } else {
            this.$Message.error(res.msg)
          }
        })
      },

转载地址:

https://www.cnblogs.com/xiaomili/p/6607627.html

 

 

 

在Ant Design Vue 1.x版本中,`a-select`组件的多选功能允许你通过自定义渲染选项和标签来实现特定的显示格式。如果你想要在用户选择后自定义回填到输入框的tag(通常表现为已选项目的标签),你可以创建一个自定义的`Tag`组件,并结合`<a-select>`的`tags`属性以及`filterOption`和`convertTag`属性来操作。 首先,你需要安装`@ant-design/icons`库,用于自定义图标: ```bash npm install @ant-design/icons ``` 然后,在你的Vue文件中,创建一个自定义的`Tag`组件,例如`CustomTag.vue`: ```html <template> <span> <i :class="icon" :style="{ color: iconColor }"></i> {{ text }} </span> </template> <script> import { DeleteOutlined } from '@ant-design/icons'; export default { props: { text: String, icon: String, iconColor: String, }, components: { DeleteOutlined, }, methods: { removeTag() { // 根据需求删除对应的值 this.$emit('remove', this.text); }, }, }; </script> ``` 接下来,在你的`parentComponent.vue`中使用这个`CustomTag`组件,并配置`a-select`: ```html <template> <a-select v-model="selectedTags" placeholder="请选择..." filterable multiple :options="options" :tags="selectedTags" @tagsChange="handleTagsChange" @remove="handleRemove" > <!-- 使用自定义的Tag组件 --> <template slot="tags"> <custom-tag v-for="(tag, index) in selectedTags" :key="index" :text="tag" :icon="deleteIcon" :icon-color="deleteColor" @remove="removeTag"></custom-tag> </template> </a-select> </template> <script> import CustomTag from './CustomTag.vue'; import { DeleteOutlined } from '@ant-design/icons'; export default { components: { CustomTag, }, data() { return { selectedTags: [], // 存储选中的值 options: [], // 你的选项数组 deleteIcon: 'deleteOutlined', deleteColor: '#f00', // 删除按钮的颜色 }; }, methods: { handleTagsChange(tags) { this.selectedTags = tags; }, handleRemove(tag) { // 这里可以处理移除单个tag的操作 this.selectedTags = this.selectedTags.filter((item) => item !== tag); }, }, }; </script> ``` 在这个例子中,`selectedTags`数组存储用户的选中项,当用户选择新的项目时,`handleTagsChange`会被触发更新`selectedTags`。当你需要删除某个tag时,可以在`handleRemove`方法中实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值