ant design vue 1.7.8版本treeSelect组件坑
2023-09-11 14:19:18 时间
treeSelect组件对于一些属性官方文档没有详细说明踩坑
勾选效果图:
搜索效果图:
html:
<a-tree-select
class="treeinput"
v-model="form.codeSchemeId"
:dropdown-style="{ maxHeight: '300px', overflow: 'auto' }"
placeholder="请选择"
tree-checkable
:tree-data="SaveCodeList"
showSearch
labelInValue
treeNodeFilterProp="schemeName"
:filterTreeNode="fillterFUN"
>
<template
slot="title"
slot-scope="{ versionNum, schemeName, remark, schemeId }"
class="titleSchem"
>
<a-tooltip>
<template slot="title">
<span>{{ schemeName }}</span>
</template>
<div style="width: 26%" v-if="schemeId != '-1'">{{ schemeName }}</div>
<div style="width: 26%" v-if="schemeId == '-1'" class="titleSchem">{{ schemeName }}</div>
</a-tooltip>
<a-tooltip>
<template slot="title">
<span>{{ versionNum }}</span>
</template>
<div style="width: 15%" v-if="schemeId != '-1'">{{ versionNum }}</div>
<div style="width: 15%" v-if="schemeId == '-1'" class="titleSchem">{{ versionNum }}</div>
</a-tooltip>
<a-tooltip>
<template slot="title">
<span>{{ remark }}</span>
</template>
<div v-if="schemeId != '-1'">{{ remark }}</div>
<div v-if="schemeId == '-1'" class="titleSchem">{{ remark }}</div>
</a-tooltip>
</template>
</a-tree-select>
javascript:
data(){
return{
//treeselect勾选的值
form:{
codeSchemeId: [],
},
//treeselect的下拉内容
SaveCodeList:[],
}
},
methods:{
//treeselect搜索事件
fillterFUN(searchVal, treeNode) {
return treeNode.data.props.schemeName.includes(searchVal)
},
//查询编码方案
modeManageMent() {
const iten = {}
this.keyword != '' ? (iten.keyword = this.keyword) : '',
//这里是调后端接口返回的
schemeEnableList(iten)
.then((res) => {
//加一个行头标题栏
const SaveCodeList = [
{
schemeId: '-1',
schemeName: '编码方案名称',
remark: '描述',
versionNum: '版本编号',
value: '-1',
scopedSlots: { title: 'title' },
disabled: true,//这里设置禁止勾选是为了效果像table标题
},
]
//如果已勾选的则不加入treeselect里,用于编辑回显数据使用
const NewSaveCodeList = res.data.filter(
(item) => !this.tableModelform.codeSchemeId.some((ele) => ele === item.schemeId)
)
NewSaveCodeList.forEach((item) => {
//把值额外赋值到value是为了搜索和勾选显示值用的(schemeId是数据对象的唯一id)
item.value = item.schemeId
//把值额外赋值到scopedSlots 是为了插槽显示如table列表一样的效果
item.scopedSlots = { title: 'title' }
SaveCodeList.push(item)
})
this.SaveCodeList = SaveCodeList
})
.catch((err) => {
this.$message.error(err.message)
})
},
}
Css
.treeinput {
width: 100%;
line-height: 35px;
overflow: auto;
white-space: nowrap;
text-overflow: ellipsis;
margin-bottom: 10px;
}
.ant-select-tree-title {
display: flex;
display: -webkit-flex; /* Safari */
> div {
width: 59%;
overflow: hidden;
text-overflow: ellipsis;
display: inline-flex;
}
}
.titleSchem {
background-color: #ececec;
line-height: 33px;
font-weight: 600;
}
勾选后获取所有勾选的值:
const form = {codeSchemeId:[]}
if (this.form.codeSchemeId.length) {
this.form.codeSchemeId.forEach((item) => {
//这个是所有勾选的值id
form.codeSchemeId.push(item.value)
})
}
踩坑点:
1.搜索时使用treeNodeFilterProp是没有效果的,改treeNodeFilterProp属性值能对使用replaceFields有效,
所以我这边使用filterTreeNode属性进行搜索
2.设置labelInValue勾选时才是保存键值对并且回显在selecttree值是正确的
3.想使用插槽slot一定不能同时使用replaceFields
以上官方文档没有详细说明,真是坑
相关文章
- 结合Vue.js的前端压缩图片方案
- Vue_(组件通讯)非父子关系组件通信
- vue - 子组件向父组件 传递方法和参数
- vue子组件的自定义事件
- vue.js3:用el-loading显示加载动画(vue@3.2.37 / element-plus@2.2.2)
- php/nginx/axios: 文件上传: 配置最长执行时间等相关项 (php8.1.1 / nginx 1.18.0 / vue@3.2.26 )
- 如何给一个vue项目重命名(vue.js 3.2.4)
- vue全局组件和局部组件
- [Vue-rx] Access Events from Vue.js Templates as RxJS Streams with domStreams
- Vue.js:轻量高效的前端组件化方案
- vue.js3:多张图片转pdf(jspdf@2.5.1 / vue@3.2.37)
- vue商城项目开发:封装banner组件、组件参数传递
- vue面试题:说说vue动态权限绑定渲染列表(权限列表渲染)
- vue.js学习:慕课网教程1:vue2.5入门
- spring boot + vue 前后端分离时间戳转换为 yyyy:MM:dd HH:mm:ss格式
- 如何在VUE单页面引入CSS、JS(CDN链接)
- vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)
- vue如何正确销毁当前组件的scroll事件?
- Vue组件化开发
- Vue组件库新增的prop属性类型是Object或者Array时默认值的设置
- 187:vue+openlayers 轨迹动画,走过后轨道呈现不同颜色
- Vue 如何实现一个底部导航栏组件
- npm ERR! Could not resolve dependency:npm ERR! peer vue@“^2.5.17“ from element-ui@2.15.12
- Vue:第一个vue-cli项目
- Vue:前端体系、前后端分离