35.解决elementUI里el-tag遍历数据错误的问题

前言:

所参与的项目里,有个编辑页面是通过点击按钮能出现一个弹框,展示这个编辑项的所有值,可以实现选中几个,编辑项后就会展示几个,如下图。所用到的标签有el-tag(用来遍历选中的所有值)和el-checkbox-group标签(用来展示所有值)

如上图所示,左边框就是el-tag标签,用来展示你已经选择的值,右边框是el-checkbox-group标签,用来展示这一项所有的值:

<el-form-item label="主机组名称" :label-width="formLabelWidth" prop="zbx_group_name">
    <el-tag :title="tag" size="medium" v-for="tag in zbx_group_name" :key="tag" :closable="closable" @close="handleClose(tag)"><span class="tags">{{tag}}</span></el-tag>
    <el-button  type="primary" size="small" @click="getGroupName" style="float:right;margin-top:3px">点击选择</el-button>
</el-form-item>
<!-- 主机组名称弹框 -->
<el-dialog title="主机组名称" :visible.sync="dialogHostname" style="margin-left:250px;" :modal="modal" :modal-append-to-body='false'>
    <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
    <el-checkbox-group v-model="zbx_group_name">
        <el-checkbox :title="item" style="width:120px;overflow:hidden;white-space:nowrap;" v-for="item in rolesName" :label="item" :key="item">{{item}}</el-checkbox>
    </el-checkbox-group>
    <div slot="footer" class="dialog-footer">
        <el-button size="small" type="primary" @click="dialogHostname = false">关 闭</el-button>
    </div>
</el-dialog>

不论是左边需要遍历展示的值,还是右边需要选中然后绑定到左边的值,他们标签上v-model绑定的都是和编辑页面其他编辑项不一致的(其他都是addForm.xxx),由于一些不可抗原因,将主机组名称对应的字段名单独在data又定义了一遍

这就导致当选择好提交,修改成功之后,再次打开编辑框,会发现之前选中的没有展示出来,原因是:我绑定的不是addForm.zbx_group_name,而提交的时候是这个,所以每次打开还需要重新获取一下zbx_group_name

而且这时候要注意,因为是多选,所以当选中之后,给后台传过去的是一串字符串,每次监听得到的也是字符串,这时候,如果在el-tag上遍历字符串,那就会把几个长单词分割成很多字母,就不符合逻辑了,所以,如上图,在获取zbx_group_name时,需要用split方法,通过逗号分隔成数组,这样el-tag再去遍历就会把选中的几个长单词独立展示出来了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 elementuiel-dialog 组件,可以进行封装来方便使用。 封装的步骤如下: 1. 创建一个新的 Vue 组件,命名为 MyDialog。 2. 在 MyDialog 组件中引入 elementuiel-dialog 组件,并设置相关属性和事件,例如: ``` <template> <el-dialog :title="title" :visible.sync="visible" :before-close="beforeClose" :append-to-body="appendToBody" :close-on-click-modal="closeOnClickModal" :close-on-press-escape="closeOnPressEscape" :lock-scroll="lockScroll" :custom-class="customClass" :destroy-on-close="destroyOnClose" > <slot></slot> </el-dialog> </template> <script> export default { name: 'MyDialog', props: { title: { type: String, default: '' }, visible: { type: Boolean, default: false }, beforeClose: { type: Function, default: null }, appendToBody: { type: Boolean, default: false }, closeOnClickModal: { type: Boolean, default: true }, closeOnPressEscape: { type: Boolean, default: true }, lockScroll: { type: Boolean, default: true }, customClass: { type: String, default: '' }, destroyOnClose: { type: Boolean, default: false } } } </script> ``` 3. 在需要使用 el-dialog 的地方,引入 MyDialog 组件,并使用 v-model 绑定 visible 属性来控制对话框的显示和隐藏,例如: ``` <template> <my-dialog v-model="dialogVisible" title="My Dialog"> <p>Dialog content goes here.</p> </my-dialog> </template> <script> import MyDialog from '@/components/MyDialog.vue' export default { components: { MyDialog }, data() { return { dialogVisible: false } } } </script> ``` 通过这样的封装,我们可以在需要使用 el-dialog 的地方,直接使用 MyDialog 组件,而不用重复设置 el-dialog 的属性和事件。同时,也可以通过修改 MyDialog 组件的默认属性来定制化 el-dialog 的样式和行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值