element ui 中 Cascader 级联选择器实现 动态加载 动态禁用 入门

这篇具有很好参考价值的文章主要介绍了element ui 中 Cascader 级联选择器实现 动态加载 动态禁用 入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

element ui Cascader 级联选择器 动态加载 动态禁用 入门

实现效果

当点击的 根选项 有 子选项 时,会向后台发送请求,并且接收数据实现动态加载。

element ui 中 Cascader 级联选择器实现 动态加载 动态禁用 入门

点击特殊选项时,可以禁用其他选项。
element ui 中 Cascader 级联选择器实现 动态加载 动态禁用 入门
element ui 中 Cascader 级联选择器实现 动态加载 动态禁用 入门
element ui 中 Cascader 级联选择器实现 动态加载 动态禁用 入门

相关代码
        <el-cascader
                     v-model="form.classesAndStudent"
                     :show-all-levels="false" //输入框中是否显示选中值的完整路径 默认为true
                     placeholder="请选择"  //输入框显示的文字
                     filterable //是否可搜索选项
                     clearable //是否支持清空选项
                     :options="prop" //可选项数据源,键名可通过 Props 属性配置
                     :props="props" //配置选项
                     @change="handleClassOrStudentChange" //当选中节点变化时触发
                     >
        </el-cascader>

props

props: {
        // emitPath:false,//返回值只有value
        multiple: true, //多选模式
        lazy: true, //	是否动态加载子节点,需与 lazyLoad 方法结合使用
        lazyLoad: this.handleGetClassOrStudent, //懒加载调用的方法
},
    
    
    
========================================================================================================
    
    
    //联级选择器获得学生或者班级或者教师
handleGetClassOrStudent(node, resolve){
    	//node相当于点击的选项,其中有上一级的信息
        //第一次调用时 node中什么也没有
    	//resolve() 返回的内容是子选项
    	const { data } = node;//等同于const data = node.data
        const { parent } = node;
     
        if(data.type==="root"&&data.value!="teacher"){
            //获得班级类型
            this.$axios.get("/manage/classesType/list").then(response => {
                // console.log(response.data.data)
                const nodes = Array.from(response.data.data,item => ({
                    //于stream流差不多,将后台返回的数据进行处理
                    
                    value: item.id, //选中项绑定值
                    label: item.typeName,//标签上显示文字
                    leaf: false,//是否有子选项
                    type: 'classesType'//这是自己定义的 方便区分
                }))
                //将nodes返回
                resolve(nodes);
            })
        }
        else if(data.value==="teacher"){
            //获得教师
            this.$axios.get("/manage/notice/findByTeacher").then(response => {
                const nodes = Array.from(response.data.teacherList, item => (console.log(response),{
                    value: item.id,
                    label: item.name,
                    leaf: true,
                    type: 'teacher'
                }))
                resolve(nodes)
            })
        }
        else if(data.type==='classesType'){
            //获得班级
            this.$axios.get("/manage/notice/noticeFindList/"+data.value).then(response => {
                const nodes = Array.from(response.data.classesList,item => ({
                    value: item.id,
                    label: item.classesName,
                    leaf: parent.data.value!='student',
                    type: 'classes'
                }))
                resolve(nodes);
            })
        }
        else if(data.type==='classes'&&parent.parent.value==='student'){
            //获得学生
            this.$axios.get("/manage/notice/findByClassStudent/"+data.value).then(response => {
                const  nodes = Array.from(response.data.studentList,item => ({
                    value: item.id,
                    label: item.name,
                    leaf: true,
                    type: 'studnet'
                }))
                resolve(nodes)
            })
        }
        resolve();
},  
    

prop

 prop:[
         {
             value: 'all', //选中项绑定值
             label: '全部', //标签上显示文字
             leaf: true,   //是否有子选项
             type: 'root', //这是自己定义的
             disabled: false //选项是否禁用
         },
         {
             value: 'allStudent',
             label: '全部学生',
             leaf: true,
             type: 'root',
             disabled: false
         },
         {
             value: 'allTeacher',
             label: '全部教师',
             leaf: true,
             type: 'root',
             disabled: false
         },
         {
             value: 'student',
             label: '学生',
             leaf: false,
             type: 'root',
             disabled: false
         },
         {
             value: 'teacher',
             label: '教师',
             leaf: false,
             type: 'root',
             disabled: false
         }
]

handleClassOrStudentChange文章来源地址https://www.toymoban.com/news/detail-504401.html

 //选择器选择后触发
handleClassOrStudentChange(node, resolve){
        // console.log(node)
        // console.log(node[0][0]=='allStudent')
        // console.log(node)
        // console.log(this.prop)

        if(node){
            let allTeacher = false;//选择全部教师true
            let allStudent = false;//选择全部学生true
            let all = false;//选择全部 true
            if(node.length>=1){

                Array.from(node,(choose) => {//遍历node集合
                    if(choose[0]==="all"){
                        all = true;
                        
                        this.form.classesAndStudent = [["all"]]//清空之前的选择
                        
                        Array.from(this.prop,(item) => {
                            if(item.value!="all"){
                                item.disabled=true;//禁用其他选项
                            }
                        })
                    }
                    else if(!all){//选择不为全部时
                        Array.from(this.prop,(item) => {
                            if(choose[0]==="allStudent"){//选择全部学生
                                if(item.value==="student"){
                                    allStudent = true;
                                    item.disabled=true;
                                }
                            }
                            if(choose[0]==="allTeacher"){//选择全部老师
                                if(item.value==="teacher"){
                                    allTeacher = true;
                                    item.disabled=true;
                                }
                            }
                        })
                    }
                })
                if(!all){
                    Array.from(this.prop,(item) => {
                        if(!allStudent){
                            if(item.value==="student"){
                                item.disabled=false;
                            }
                        }
                        if(!allTeacher){
                            if(item.value==="teacher"){
                                item.disabled=false;
                            }
                        }
                    })
                }

            }
            else {
                Array.from(this.prop,(item) => {
                    item.disabled=false;//取消全部选择后 解除禁用
                })
            }
        }
},

到了这里,关于element ui 中 Cascader 级联选择器实现 动态加载 动态禁用 入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue+element-ui的el-cascader实现动态添加删除级联地点输入框

    实现省市区三级地点级联选择,可联想; 包括始发地点、途径地点、终止地点,始发地点、终止地点均为一个,途径地点可以没有也可以是多个; 用户可以动态添加/删除途径地点。 使用级联选择器Cascader需要的树形数据,前端请求到后端获取省市区数据并处理为elementui官网

    2024年02月04日
    浏览(51)
  • element-ui cascader级联选择器,获取对象Object(getCheckedNodes()、currentLabels)

    element-ui中的cascader级联选择器,官网文档中并没有提供方法直接获取当前选择的Object,这里特别需要注意element-ui的版本问题,不同的版本需要用到不同的方法。 可以用this.$refs[‘cascader’].currentLabels获取选中节点。 //获取节点label内容 因为安装的element-ui版本高于2.7.0版本,所

    2024年02月16日
    浏览(40)
  • vue element UI el-cascader 级联选择器 获取当前选择值的整个对象

    要使用到cascader组件选中的数据的所有部分,并没有类似于select组件中的value可以指定,查看官方文档提供了新的方法,官方地址https://element.eleme.cn/#/zh-CN/component/cascader html部分 可以正常获取到该节点的全部数据,如下图所示: 如有问题请联系我~ 欢迎加入QQ群:

    2024年02月15日
    浏览(46)
  • [element-ui] 级联选择器el-cascader不触发change事件

    el-cascader 使用官网的数据是可以的 官网数据中最后一级没有children 就可以了 参考: elementui级联选择器Cascader不触发change事件

    2024年01月23日
    浏览(40)
  • element-ui el-cascader级联选择器设置指定层级不能选中(示例代码)

    本文为转载原地址:https://www.136.la/shida/show-396330.html 有时候用element-ui el-cascader级联选择器添加分类时会遇到最多添加几级的限定.看了文档,只要给需要禁止选择的选项添加disabled属性就可以.但是使用一层一层循环遍历数据感觉很麻烦,自己写了个遍历的方法,纪录下,方便以后使

    2024年02月11日
    浏览(52)
  • vue+element Cascader 级联选择器 > 实现省市区三级联动

    看完我们就开始啦 完美(实现后别忘记动动小手点个赞哦~) 请安装指定版本的element-china-area-data(5.0.2),否则可能会导致报错:CodeToText为undefined(我就遇到了(嘘),要注意哦~) ↩︎

    2024年02月16日
    浏览(53)
  • Naive UI 组件使用体验之-级联选择 Cascader

    地址区域选择 安装依赖 npm install naive-ui -D 按需引入之-手动引入 使用 这里我们是要对收货地址进行一个增加操作。 我们这里只针对 所在地址 进行说明。 获取region 这里需要通过接口提前请求

    2024年02月11日
    浏览(37)
  • el-cascader级联选择器加载远程数据、默认开始加载固定条、可以根据搜索加载远程数据。

    加载用户列表分页请求、默认请求20条数据。想添加远程搜索用户功能。原有的方法 filter-method 不能监听到输入清空数据的时候。这样搜索完无法返回默认的20条数据。 直接监听级联选择的 v-model 绑定的值是无法检测到用户自己输入的。 解决思路: el-cascader 没有提供监听用户

    2024年02月14日
    浏览(41)
  • vue中Cascader 级联选择器实现-修改实现

    vue 的cascader研究了好长时间,看了官网给的示例,上网查找了好多信息,才解决修改时回显的问题,现将方法总结如下: el-form-item   label=\\\"芯片\\\" prop=\\\"firmware\\\"                 el-cascader                     ref=\\\"cascader\\\"                     :options=\\\"firmwareTypeOptions\\\"        

    2024年02月15日
    浏览(49)
  • Element UI级联选择器 多选模式下,实现同一父级下最多只能选中一个子级

    这个需求有点多选与单选结合的意思,同一父级下的子节点单选,又可以选择多个不同父级下的节点。这里以两级为例,实现一个在多选模式下,同一父级下最多只能选中一个子级的级联选择器。 1、隐藏父级节点处的CheckBox 多选模式下可以通过勾选父级一键选中所有的子级

    2024年02月01日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包