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.rhkb.cn/news/329414.html

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

相关文章

Vitis HLS 学习笔记--控制驱动TLP - Dataflow视图

目录 1. 简介 2. 功能特性 2.1 Dataflow Viewer 的功能 2.2 Dataflow 和 Pipeline 的区别 3. 具体演示 4. 总结 1. 简介 Dataflow视图&#xff0c;即数据流查看器。 DATAFLOW优化属于一种动态优化过程&#xff0c;其完整性依赖于与RTL协同仿真的完成。因此&#xff0c;…

JavaEE-文件IO1

文章目录 一、什么是文件IO?1.1 IO1.2 文件1.2.1 路径1.2.2 文件分类 二、使用Java针对文件系统进行操作 一、什么是文件IO? 1.1 IO IO分别代表Input和Output即输入和输出。比如我的电脑可以从网络上下载文件&#xff0c;也可以通过网络上传文件或者我把我的内存中的数据保…

巨某量引擎后台登录实战笔记 | Playwright自动化框架

前言 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 入正题看看滑块是怎么个事…

Arthas,应用诊断利器!【送源码】

Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类加载信…

C#, PCANBasicd.dll库读写CAN设备数据

PCAN-Basic是一个简单的 PCAN 系统编程接口。 通过 PCAN-Basic Dll,可以将自己的应用程序连接到设备驱动程序和 PCAN 硬件,以与 CAN 总线进行通信。支持C、C++、C#、Delphi、JAVA、VB、Python等语言。 PCAN-Basic库和驱动下载地址 ​ ​https://www.peak-system.com/filead…

O2OA(翱途)开发平台数据统计如何配置?

O2OA提供的数据管理中心&#xff0c;可以让用户通过配置的形式完成对数据的汇总&#xff0c;统计和数据分组展现&#xff0c;查询和搜索数据形成列表数据展现。也支持用户配置独立的数据表来适应特殊的业务的数据存储需求。本文主要介绍如何在O2OA中开发和配置统计。 一、先决…

mysql 多表关联查询性能优化-同一sql不同的执行计划

一、问题背景 相同的sql&#xff0c;不同的日期&#xff0c;执行的时间差异很大&#xff0c;执行计划不一样。执行快时&#xff0c;30ms左右。执行慢时&#xff0c;15s左右。 二、分析结论 1、经过分析&#xff0c;发现不同日期下&#xff0c;sql的执行计划不同&#xff0c;驱…

Qt 科目一考试系统(有源码)

项目源码和资源&#xff1a;科目一考试系统: qt实现科目一考试系统 一.项目概述 该项目是一个基于Qt框架开发的在线考试系统&#xff0c;主要实现了考试题目的随机抽取、考试时间限制、成绩统计等功能。用户可以通过界面操作进行考试&#xff0c;并查看自己的考试成绩。 二.技…

【BSP开发经验】用户态栈回溯技术

前言 在内核中有一个非常好用的函数dump_stack, 该函数在我们调试内核的过程中可以打印出函数调用关系&#xff0c;该函数可以帮助我们进行内核调试&#xff0c;以及让我们了解内核的调用关系。同时当内核发生崩溃的时候就会自己将自己的调用栈输出到串口。 栈回溯非常有利于我…

react 下拉框内容回显

需要实现效果如下 目前效果如下 思路 : 将下拉框选项的value和label一起存储到state中 , 初始化表单数据时 , 将faqType对应的label查找出来并设置到Form.Item中 , 最后修改useEffect 旧代码 //可以拿到faqType为0 但是却没有回显出下拉框的内容 我需要faqType为0 回显出下拉…

【实战教程】使用Spring AOP和自定义注解监控接口调用

一、背景 随着项目的长期运行和迭代&#xff0c;积累的功能日益繁多&#xff0c;但并非所有功能都能得到用户的频繁使用或实际上根本无人问津。 为了提高系统性能和代码质量&#xff0c;我们往往需要对那些不常用的功能进行下线处理。 那么&#xff0c;该下线哪些功能呢&…

QTextEdit 控件上显示信息:

目录 1. 使用 append 方法: 2. 使用 setPlainText 方法 3.例子&#xff1a; 1. 使用 append 方法: 如果你希望在 QTextEdit 控件上追加显示新的信息&#xff0c;可以使用 append 方法。例如&#xff0c;当你想要追加一行新的日志信息&#xff1a; self.text_edit.append(&…

卷积神经网络(CNN)详细介绍及其原理详解

卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是深度学习中非常重要的一类神经网络&#xff0c;主要用于图像识别、图像分类、物体检测等计算机视觉任务。本文将详细介绍卷积神经网络的基本概念、结构组成及其工作原理&#xff0c;并…

leetcode以及牛客网单链表相关的题、移除链表元素、链表的中间节点、合并两个有序链表、反转链表、链表分割、倒数第k个节点等的介绍

文章目录 前言一、移除链表元素二、链表的中间节点三、合并两个有序链表四、反转链表五、链表分割六、倒数第k个节点总结 前言 leetcode以及牛客网单链表相关的题、移除链表元素、链表的中间节点、合并两个有序链表、反转链表、链表分割、倒数第k个节点等的介绍 一、移除链表元…

集群分发脚本xsync

1.环境准备 1.准备三台服务器&#xff08;我这里使用虚拟机,操作系统 CentOS7 &#xff09;它们的IP分别为 192.168.188.135、192.168.188.136、192.168.188.137 2.先将三台机器的主机名修改&#xff0c;为每台主机设置hostname&#xff08;具体名称由自己定义&#xff09;&am…

https为何安全?

HTTPS&#xff08;超文本传输安全协议&#xff09;是一种用于安全通信的网络协议&#xff0c;它在HTTP协议的基础上通过SSL/TLS&#xff08;安全套接层/传输层安全&#xff09;协议来加密数据&#xff0c;以保护网络数据的传输安全。 TLS/SSL 基础概念 概念源自百度百科&…

电磁兼容(EMC):时钟电路PCB设计

目录 1. 布局 2. 布线 时钟电路做为产品内部的强辐射源&#xff0c;在设计阶段已经选用展频或者分频方案后&#xff0c;见另外接下来就需要对PCB的耦合路径进行规划设计。时钟电路具体的PCB设计具体要求如下&#xff1a; 1. 布局 结构干涉&#xff1a;时钟电路的晶振和法拉电…

BUUCTF---misc---我吃三明治

1、下载附件是一张图片 2、在winhex分析&#xff0c;看到一串整齐的编码有点可疑&#xff0c;保存下来&#xff0c;拿去解码&#xff0c;发现解不了&#xff0c;看来思路不对 3、再仔细往下看的时候也发现了一处这样的编码&#xff0c;但是这次编码后面多了一段base编码 4、拿去…

JS对象超细

目录 一、对象是什么 1.对象声明语法 2.对象有属性和方法组成 二、对象的使用 1.对象的使用 &#xff08;1&#xff09;查 &#xff08;2&#xff09;改 &#xff08;3&#xff09;增 &#xff08;4&#xff09;删&#xff08;了解&#xff09; &#xff08;5&#xf…

Linux文件:缓冲区、缓冲区刷新机制 | C库模拟实现

Linux文件&#xff1a;缓冲区、缓冲区刷新机制 | C库模拟实现 一、缓冲区的作用二、缓冲区的刷新机制三、测试样例解析3.1 测试样例和运行结果3.2 结果分析1、向显示器文件写入&#xff1a;2、向磁盘文件进行写入&#xff1a; 四、语言级别的缓冲区究竟在哪&#xff1f;五、C库…