vue三级联动组件

背景

  • 项目中经常出现三级下拉框组件的要求,这种组件其中一级发生变化,子级的组件就会发生变化
  • 如果这一个组件,单独作为搜索条件使用,很好写,同时作为搜索条件和form回写组件,回显就比较困难

子组件代码

  • 将与父组件通信的属性定义在props中: 在这里插入图片描述
  • 定义三个handler处理值的变化 ,同时绑定在对应下拉框
    在这里插入图片描述
  • 对于prop的值,不可以直接在子组件中修改,只能通知父组件修改

在这里插入图片描述

  • 有时候子组件的根性有延迟,导致出现问题,可以使用父组件传递过来的值,或者使用next函数
    在这里插入图片描述
<script>
import {getSonMenuList} from "@/api/maintain/classfiy";export default {name: "costClassify",props: {proProcedureId: Number,costElementId: Number,costPartitionId: Number,},data() {return {proProcedureList: [],costElementList: [],costPartitionList: [],};},watch: {},methods: {proProcedureIdHandler(value) {this.$emit('update:proProcedureId', value);this.costElementList = []// this.costElementId = null  避免这种操作 不要在子组件中直接修改prop的值, 一般来说,prop是不应该被修改的,它是父组件传递给子组件的数据,子组件应该保持对prop只读,不应该修改它的值。// 如果一定要修改,可以通过$emit事件的方式,通知父组件修改prop的值,再通过prop的值的变化,来触发子组件的重新渲染。this.costElementIdHandler(null)if (!value) {return}getSonMenuList(value).then((response) => {this.costElementList = response.data})},costElementIdHandler(value) {this.$emit('update:costElementId', value);this.costPartitionList = []// this.costPartitionId = null// 通知外层this.costPartitionIdHandler(null)if (!value) {return}getSonMenuList(value).then((response) => {this.costPartitionList = response.data})},costPartitionIdHandler(value) {this.$emit('update:costPartitionId', value);if (!value) {return}},// 初始化init() {console.log('costClassify init')console.log(this)// 获取一级目录  生产工序getSonMenuList(-1).then((response) => {this.proProcedureList = response.data})// 如果是打开的编辑页面  自带参数  需要初始化if (this.proProcedureId) {this.proProcedureIdHandler(this.proProcedureId)}if (this.costElementId) {this.costElementIdHandler(this.costElementId)}if (this.costPartitionId) {this.costPartitionIdHandler(this.costPartitionId)}},refresh(proProcedureId, costElementId, costPartitionId) {this.$nextTick(() =>{console.log('costClassify refresh')// 获取一级目录  生产工序getSonMenuList(-1).then((response) => {this.proProcedureList = response.data})// 如果是打开的编辑页面  自带参数  需要初始化if (proProcedureId) {getSonMenuList(proProcedureId).then((response) => {this.costElementList = response.data})}if (costElementId) {console.log('三级列表执行'+costElementId)getSonMenuList(costElementId).then((response) => {this.costPartitionList = response.data})console.log('三级列表执行成功')}if (costPartitionId) {}})}},mounted() {console.log('costClassify mounted')this.init()},
};</script><template><span><el-form-item label="生产工序" prop="proProcedureId"><el-select v-model="proProcedureId" placeholder="请输入生产工序" clearable size="mini"@change="proProcedureIdHandler"><el-option v-for="proProcedure in proProcedureList" :key="proProcedure.id" :label="proProcedure.name":value="proProcedure.id"/></el-select></el-form-item><el-form-item label="成本要素" prop="costElementId"><el-select v-model="costElementId" placeholder="请输入成本要素" clearable size="mini"@change="costElementIdHandler"><el-option v-for="costElement in costElementList" :key="costElement.id" :label="costElement.name":value="costElement.id"/></el-select></el-form-item><el-form-item label="费用细分" prop="costPartitionId"><el-select v-model="costPartitionId" placeholder="请输入费用细分" clearable size="mini"@change="costPartitionIdHandler"><el-option v-for="costPartition in costPartitionList" :key="costPartition.id" :label="costPartition.name":value="costPartition.id"/></el-select></el-form-item></span>
</template><style scoped lang="scss"></style>

父组件调用

  • refs获取子组件的引用
  • 第一次的时候子组件没有渲染完毕,找不到refresh函数,要使用nextTick延迟调用
/** 修改按钮操作 */
handleUpdate(row) {this.reset();const id = row.id || this.idsthis.form = Object.assign({}, row);this.open = true;this.editFlag = true;this.title = "修改月度费用";console.log(this.form.proProcedureId, this.form.costElementId, this.form.costPartitionId)this.$nextTick(() => {this.$refs.costClassifyRef.refresh(this.form.proProcedureId, this.form.costElementId, this.form.costPartitionId);})
},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FaceFusion源码框架解读

FaceFusion源码框架解读 我的视频讲解&#xff1a;FaceFusion入门教学 FaceFusion官网 FaceFusion是一款开源的AI换脸工具&#xff0c;一款非常好用的换脸工具&#xff0c;操作简单&#xff0c;上手容易。 Facefusion&#xff1a;GitHub - facefusion/facefusion: Next gene…

我怎么使用AI大语言模型学英语

今天已经是我开始英语拉练任务的第39天了&#xff0c;一直在笃定的、雷打不动的、机械笨拙的重复做一件事&#xff0c;那就是使用AI工具&#xff0c;将我想要说的话翻译成英文&#xff0c;生成语音文件&#xff0c;每天朗读三小时&#xff0c;最终整个背下来。我也在思考&#…

【Java】手把手学会数组的使用

数组的基本用法 创建数组 基本语法&#xff1a; // 动态初始化 数据类型 [] 数组名称 new 数据类型 [] { 初始化数据 }; // 静态初始化 数据类型 [] 数组名称 { 初始化数据 }; 代码示例&#xff1a; int[] array1 {1,2,3,4,5};int[] array2 new int[]…

JS、Go、Rust 错误处理的不同 - JS 可以不用 Try/Catch 吗?

原文&#xff1a;Mateusz Piorowski - 2023.07.24 先来了解一下我的背景吧。我是一名软件开发人员&#xff0c;有大约十年的工作经验&#xff0c;最初使用 PHP&#xff0c;后来逐渐转向 JavaScript。 大约五年前&#xff0c;我开始使用 TypeScript&#xff0c;从那时起&#…

Flume 的基本介绍和安装部署

一、Flume 概述 Flume 是 Cloudera 提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的框架服务 Flume 基于流式架构&#xff0c;灵活简单&#xff0c;能够实时读取服务器本地磁盘的数据&#xff0c;将数据写入到 HDFS 二、Flume 基础架构…

Cloneable 接口和深拷贝,浅拷贝

目录 一.Cloneable 接口 二.浅拷贝 三.深拷贝 四.comparable接口、 五.comparator接口 1.Java 中内置了一些很有用的接口 , Cloneable 就是其中之一 . Object 类中存在一个 clone 方法 , 调用这个方法可以创建一个对象的 " 拷贝 ". 2.来说说调用 clone 方法…

基于深度学习的表情识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人工智能技术的快速发展&#xff0c;表情识别成为了人机交互领域的一个研究热点。表情识别技术旨…

Python数字比大小获取大的数

目录 一、引言 二、数字比较的基本语法 三、获取较大的数 使用条件语句 使用内置函数 四、处理特殊情况 比较非数字类型 处理无穷大和NaN 五、应用实例 在游戏开发中比较分数 在数据分析中找出最大值 六、优化与性能 七、总结 一、引言 在Python编程的广阔天地中…

巧秒用AI写作工具做影视解说文案,效率高!

在自媒体内容输出的快节奏当下&#xff0c;影视解说已经成为一种受欢迎的内容形式。然而&#xff0c;创作高质量的影视解说文案往往需要花费大量的时间和精力。随着人工智能技术的不断发展&#xff0c;AI写作工具为我们提供了一种全新的、高效的解决方案。 AI写作工具利用先进的…

AI服务器 IO互联芯片解决方案pcie switch国产替代博通

服务器是大数据、人工智能、区块链、云计算、元宇宙等的基础设施&#xff0c;全国每年400万台服务器出货&#xff0c;预计 2025年超过500万台&#xff08;中商产业研究院&#xff09;&#xff0c;高性能企业级互联芯片控制着服务器的神经系统和循环系统。 市场痛点&#xff1…

大厂程序员离职,开发一个盲盒小程序2万,一周开发完!

大家好&#xff0c;我是程序员小孟&#xff01; 前面接了一个盲盒的小程序&#xff0c;主要的还是商城&#xff0c;盲盒的话只是其中的有一个活动。 现在的年轻人是真的会玩&#xff0c;越来越新的东西出来&#xff0c;越来越好玩的东西流行。 就像最近很火的地摊盲盒。 讲…

第N4周:中文文本分类——Pytorch实现

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 数据集&#xff1a;train 一.加载数据 import torch import torch.nn as nn import torchvision from torchvision import transforms,d…

vue3的核心API功能:computed()API使用

常规使用方法: 这样是常规使用方法. 另一种使用方法: 这样分别定义computed的get回调函数和set回调函数, 上面例子定义了plusOne.value的值为1, 那么这时候就走了computed的set回调函数,而没有走get回调函数. 当我们打印plusOne.value的值的时候,走的是get的回调函数而不是…

ios 原生项目迁移flutter第一天环境

由于公司已经有第一个吃螃蟹的项目组&#xff0c;我在迁移的时候想着站在巨人的肩膀上&#xff0c;但是搭配环境一定要问清楚对方flutter版本&#xff0c;路径也要安排好&#xff0c;不然就不行。 对着自己的项目照着葫芦画瓢&#xff0c;我刚开始为了配置管理图个方便随便放&…

Unity3D读取Excel表格写入Excel表格

系列文章目录 unity工具 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、读取Excel表格&#x1f449;二、写入Excel表格&#x1f449;三、Fileinfo和Directoryinfo的操作&#x1f449;四、壁纸分享&#x1f449;总结 &#x1f449;前言 有时候难免会遇到读取文件写…

提供一个c# winform的多语言框架源码,采用json格式作为语言包,使用简单易于管理加载且不卡UI,支持“语言分级”管理

提供一个c# winform的多语言框架源码&#xff0c;采用json格式作为语言包&#xff0c;不使用resx资源&#xff0c;当然本质一样的&#xff0c;你也可以改为resx 一、先看下测试界面 演示了基本的功能&#xff1a;切换语言&#xff0c;如何加载语言&#xff0c;如何分级加载语…

【webrtc】内置opus解码器的移植

m98 ,不知道是什么版本的opus,之前的交叉编译构建: 【mia】ffmpeg + opus 交叉编译 【mia】ubuntu22.04 : mingw:编译ffmpeg支持opus编解码 看起来是opus是1.3.1 只需要移植libopus和opus的webrtc解码部分即可。 linux构建的windows可运行的opus库 G:\NDDEV\aliply-0.4\C…

如何为社交feed场景设计缓存体系?no.35

Feed 流场景分析 Feed 流是很多移动互联网系统的重要一环&#xff0c;如微博、微信朋友圈、QQ 好友动态、头条/抖音信息流等。虽然这些产品形态各不相同&#xff0c;但业务处理逻辑却大体相同。用户日常的“刷刷刷”&#xff0c;就是在获取 Feed 流&#xff0c;这也是 Feed 流的…

达梦数据库详解

达梦认证是指针对中国数据库管理系统&#xff08;DBMS&#xff09;厂商达梦公司所推出的数据库产品&#xff0c;即达梦数据库&#xff08;DMDB&#xff09;&#xff0c;进行的一种官方认证体系。达梦认证旨在验证数据库管理人员对达梦数据库产品的掌握程度&#xff0c;及其在数…

【HUST】信道编码|基于LDPC码的物理层安全编码方案概述

本文对方案的总结是靠 Kimi 阅读相关论文后生成的&#xff0c;我只看了标题和摘要感觉确实是这么回事&#xff0c;并没有阅读原文。 行文逻辑&#xff1a;是我自己设定的&#xff0c;但我并不是这个研究领域的&#xff0c;所以如果章节划分时有问题&#xff0c;期待指出&#x…