项目交互-选择器交互

选择器交互

javascript 复制代码
<div>
    <el-select v-model="valueOne" placeholder="年级">
       <el-option v-for="item in optionsOne" :key="item.gradeId" :label="item.gradeName" :value="item.gradeId">
       </el-option>
    </el-select>
    <el-select v-model="valueTwo" placeholder="班级">
       <el-option v-for="item in optionsTwo" :key="item.classId" :label="item.className" :value="item.classId">
       </el-option>
    </el-select>
</div>
javascript 复制代码
data () {
    return {
        valueOne: '',
        valueTwo: '',
        gradeId: 4,
        optionsOne: [],
        optionsTwo: [],
    }
}

1.写接口

(api)(@/api/user/index.js)

javascript 复制代码
// 查询年级列表
export function searchGradeLists (query) {
    return request({
        url: '/system/grade/common/list',//接口
        method: 'get',
        params: query
    })
}

// 查询班级列表
export function searchClassList (query) {
    return request({
        url: '/system/class/list',
        method: 'get',
        params: query,
    })
}

2.在组件中导入接口

javascript 复制代码
import {
    searchGradeLists,
    searchClassList,
} from '@/api/user/index'

3.调用接口

因为年级选择器一加载页面就应该有数据可以选择,所以需要挂载的时候请求数据

javascript 复制代码
mounted () {
   // 因为一加载页面就应该有数据
   // 查询年级列表
   searchGradeLists({ pageNum: 1, pageSize: 10 }).then(res => {
      console.log(res, '哈哈哈哈哈')
      this.optionsOne = res.rows
   })
},

4.不能直接像选择班级一样请求接口

虽然请求年级的数据成功了,现在需要请求班级的数据,但是由于班级的数据的显示是当前选择的年级对应的所有班级。所以选择班级不能直接像选择班级一样请求接口。

解决:在element-ui中,选中值发生变化时会触发change事件,所以取到当前所选的年级。如下:

4.1给el-select标签绑定change事件

javascript 复制代码
<div>
    <el-select v-model="valueOne" placeholder="年级">
       <el-option v-for="item in optionsOne" :key="item.gradeId" :label="item.gradeName" :value="item.gradeId">
       </el-option>
    </el-select>
    <el-select v-model="valueTwo" placeholder="班级">
       <el-option v-for="item in optionsTwo" :key="item.classId" :label="item.className" :value="item.classId">
       </el-option>
    </el-select>
</div>

4.2因为选择年级后返回e

javascript 复制代码
methods: {
    // 选择年级
    handleChangeGrade (e) {
        console.log(e, '。。')
        console.log(this.gradeId, 'idid')
        this.gradeId = e
        console.log(this.gradeId, ';;;')
        console.log(e, '././')
    },
}

查看控制台发现选择年级触发的change事件返回的e是gradeId。因此将e赋值给this.gradeId(这个this.gradeId是data里面设置的gradeId)

4.3将返回的gradeId传给请求查询班级的接口

接下来,点击班级选择器时,应该显示年级对应的所有班级(利用change事件返回的gradeId),所以需要将返回的gradeId传给请求查询班级的接口

javascript 复制代码
methods: {
    // 选择年级
    handleChangeGrade (e) {
        console.log(e, '。。')
        console.log(this.gradeId, 'idid')
        this.gradeId = e
        console.log(this.gradeId, ';;;')
        console.log(e, '././')


        // 新加的代码
        // 先清空数组
        this.valueTwo = '' //注意需要清空一下第二个选择器的数据
        // 将gradeId传给查询班级的方法,并调用这个方法
        this.requestClassList(e)
    },


    // 新加的代码
    // 查询班级(查询年级对应的班级列表)
    requestClassList (e) {
        console.log(e, '???')
        searchClassList({ pageNum: 1, pageSize: 10, gradeId: e }).then(res => {
            console.log(res, '嘻嘻嘻嘻嘻')
            this.optionsTwo = res.rows
        })
    }

    // 注意gradeId: e不能写出e,对象键值对
}

最后在第二个选择器也同理使用change方法,因为后面页面渲染事件需要用到。选择器交互成功!

下面补充选择班级的代码

复制代码
        // 选择班级   handleChangeClass是change事件
        handleChangeClass (e) {
            console.log(e, '123')
            // 查询教师列表
            this.searchUserList(e)
            // 查询学生列表

        },
        // 查询教师列表
        searchUserList (e) {
            searchUserList({ classId: e, pageNum: 1, pageSize: 10, }).then(res => {
                if (res.code == 200) {
                    console.log(res)
                }
            })
        }
相关推荐
蜡台几秒前
Uniapp 开发H5 页面跳转拦截
前端·javascript·uni-app
qq7422349844 分钟前
Gradio 极简入门:三分钟为AI模型打造交互界面,并对比Streamlit与Dash如何选型
人工智能·算法·大模型·交互·dash
IT爱学堂6 分钟前
Three.js可视化企业实战WEBGL课,2023年全新WEB 3D THREEJS技术
前端·javascript·webgl
网安蟹佬霸21 分钟前
WebAssembly安全攻防实战:从WASM逆向到漏洞利用
前端·安全·自动化·区块链·智能合约·wasm
Su米苏39 分钟前
关于@vue-office/excel 渲染异常滚动失去内容
前端·vue.js·excel
灯澜忆梦41 分钟前
【基于GO的Web开发10】gin获取HTML-Form表单提交参数
前端·后端·golang·html·gin
撑伞的鱼99371 小时前
2026年前端AI编程工具评测:Figma 还原、组件复用、跨文件联动三项对比
前端·ai编程·figma·效率工具·ai编程工具
码视野1 小时前
基于 Vue3 + Element Plus 的【微短剧剧本智能创作与分镜生产协同系统】设计与实现(含PRD/三端源码/大屏)
前端·人工智能·vue3
zzzzzz3102 小时前
36K stars 的“酷炫组件”,到底该怎么用才不显得用力过猛?
前端·react.js·动效
2401_894915535 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎