vue3+elementPlus+cascader动态加载封装自定义组件+v-model指令实现父子通信

news2024/11/18 3:49:11

文章目录

  • select普通操作 (1)
  • cascader操作(2)

select普通操作 (1)

搜索条件需求:接口入参需要houseId,但是要先选择完楼栋,再选择单元,最后选择房屋
在这里插入图片描述

在这里插入图片描述
如图,我们还得操作两三次。有点烦。

     <el-form-item label="楼栋" prop="buildingId">
            <el-select v-model="queryParams.buildingId"  @change="handleUnit" filterable placeholder="请选择楼栋" style="width: 180px">
              <el-option
              v-for="item in buildingOptions"
              :key="item.buildingId"
              :label="item.buildingName"
              :value="item.buildingId"
              />
          </el-select>
         </el-form-item>
 

        <el-form-item label="单元" prop="unitId"  v-if="queryParams.buildingId">
          <el-select v-model="queryParams.unitId"     @change="handleHouse"  filterable placeholder="请选择单元" style="width: 180px">
            <el-option
            v-for="item in unitOptions"
            :key="item.unitId"
            :label="item.unitName"
            :value="item.unitId"
            />
          </el-select>
        </el-form-item>


      <el-form-item label="房屋" prop="houseId" v-if="queryParams.unitId">
        <el-select v-model="queryParams.houseId"  filterable placeholder="请选择房屋" style="width: 180px">
          <el-option
          v-for="item in houseOptions"
          :key="item.houseId"
          :label="item.houseName"
          :value="item.houseId"
          />
        </el-select>
      </el-form-item>

cascader操作(2)

在这里插入图片描述
父组件

      <my-cascader
            v-model="queryParams.houseId"
            v-if="editCascaderVisible"
            :label="'房屋'"
            :prop="'houseId'"
            ></my-cascader>
        
            <my-cascader
            v-model="queryParams.houseId"
            v-else
            :label="'房屋'"
            :prop="'houseId'"
            ></my-cascader>
 

子组件


<!-- MyCascader.vue -->

<template>
    <el-form-item :label="label" :prop="prop">
      <el-cascader
        ref="cascader"
        :options="options"
        :props="propsfs"
        placeholder="请选择房屋"
        v-model="houseId"
        @change="handleChange"
      ></el-cascader>
    </el-form-item>
  </template>
  
  <script setup>
import useUserStore from '@/store/modules/user'
const userStore = useUserStore()
import { buldingSelect } from "@/api/vae/building";
import { unitSelect } from "@/api/vae/unit";
import { houseSelect } from "@/api/vae/house";
  const props = defineProps({
    // 图片数量限制
    label: {
      type: String,
      default: '',
    },
    prop: {
      type: Object,
      default: '',
    },
    modelValue:{
        type:String,
        default: '',
    }
  });
  const $emits = defineEmits(['update:modelValue'])


  const options=ref([]);
  const label=ref(props.label);
  const prop=ref(props.prop);
  const buildingId=ref('')
  const houseId=ref(props.modelValue)
  const propsfs=ref({
        lazy: true,
        lazyLoad (node, resolve) {
          const { level } = node;
          if(level == 0) {
            buldingSelect({villageId:userStore.villageId}).then(res => {
              const nodes = (res.data || [])
              .map(item => ({
                value: item.buildingId,
                label: item.buildingName,
                leaf: level >= 2
              }));
              resolve(nodes);
            })
          } else if(level == 1) {
            buildingId.value=node.value
            unitSelect({villageId:userStore.villageId,buildingId:node.value}).then(res => {
              const nodes = (res.data || [])
              .map(item => ({
                value: item.unitId,
                label: item.unitName,
                leaf: level >= 2
              }));
              resolve(nodes);
            })
          } else {
            houseSelect({villageId:userStore.villageId,buildingId:buildingId.value,unitId:node.value}).then(res => {
              const nodes = (res.data || [])
              .map(item => ({
                value: item.houseId,
                label: item.houseName,
                leaf: level >= 2
              }));
              resolve(nodes);
            })
          }
        }
  })
  const handleChange = (value) => {
    $emits('update:modelValue',value[value.length-1])
}



  </script>
  

v-if="editCascaderVisible" 加这个是为了重新渲染子组件,因为全局需要切换小区,故此不会触发。再加上v-if就可以重新渲染。

在我的子组件中,当 houseId 的值发生变化时,我使用了 $emits('update:modelValue', value[value.length-1]) 来触发父组件的更新。

为什么要加v-else,如果不弄,搜索条件后边的会往前面挤。

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

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

相关文章

vue2、vue3状态管理之vuex、pinia

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、状态管理之vuex1.1 State调用&#xff1a;1.2 Mutation在vuex中定义&#xff1a;在组件中使用&#xff1a; 1.3 Action在vuex中定义&#xff1a;将上面的减…

k8s是什么

生么是k8s&#xff1a; Kubernetes:8个字母省略&#xff0c;就是k8s 自动部署&#xff0c;自动扩展和管理容器化部署的应用程序的一个开源系统、 k8s是负责自动化运维管理多个容器化程序的集群&#xff0c;是一个功能强大的容器编排工具。 分布式和集群化的分布式进行容器管…

关于MySQL、分布式系统、SpringCloud面试题

前言 之前为了准备面试&#xff0c;收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文&#xff1a;https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv MySQL 索引 说一下有哪些锁&#xff1f; 行锁有哪些&#xff1f; 性能优化 分库分表…

GrayLog日志平台的基本使用-ssh接入Dashboards展示

这里使用的版本为graylog4.2.10 1、一键安装graylog4.2.10&#xff0c;解压zip包&#xff0c;执行脚本就行 链接&#xff1a;https://pan.baidu.com/s/11U7GpBZ1B7PXR8pyWVcHNw?pwdudln 提取码&#xff1a;udln 2、通过rsyslog采集系统日志&#xff0c;具体操作参考前面文…

Java框架基础--maven,http,postman

maven Maven 提供了一个标准的构建生命周期和一组约定的目录结构&#xff0c;以简化和规范项目的构建过程。它主要用于 Java 项目&#xff0c;但也可以用于其他类型的项目。提高了项目的可维护性、可重复性和一致性&#xff0c;简化了构建和依赖管理的复杂性&#xff0c;使得开…

人类偏好导向:DPO技术重塑SDXL-1.0图像生成

引言 在AI领域&#xff0c;适应和理解人类偏好一直是技术发展的重要方向。斯坦福大学研究团队最近提出的Diffusion-DPO方法&#xff0c;旨在将这一理念应用于图像生成模型&#xff0c;特别是在文本到图像的转换领域。 Huggingface模型下载: https://huggingface.co/mhdang/ A…

dl转置卷积

转置卷积 转置卷积&#xff0c;顾名思义&#xff0c;通过名字我们应该就能看出来&#xff0c;其作用和卷积相反&#xff0c;它可以使得图像的像素增多 上图的意思是&#xff0c;输入是22的图像&#xff0c;卷积核为22的矩阵&#xff0c;然后变换成3*3的矩阵 代码如下 import…

遗传算法的应用——求解一元函数的极值

遗传算法的应用——求解一元函数的极值 1 基本概念2 预备知识3.1 模拟二进制转化为十进制的方法3.2 轮盘赌选择算法 3 问题4 Matlab代码5 运行效果6 总结 1 基本概念 遗传算法(Genetic Algorithm,GA)是模拟生物在自然环境中遗传和进化过程从而形成的随机全局搜索和优化方法&am…

C#与php自定义数据流传输

C#与php自定义数据流传输 介绍一、客户端与服务器数据传输流程图客户端发送数据给服务器&#xff1a;服务器返回数据给客户端&#xff1a; 二、自定义数据流C#版本数据流PHP版本数据流 三、数据传输测试1.在Unity中创建一个C#脚本NetWorkManager.cs2.服务器www目录创建StreamTe…

Docker 创建容器

1、创建MySQL5.7 拉取镜像&#xff1a;docker pull mysql:5.7创建容器&#xff1a;docker run -d --name mysql57001 -p 3306:3306 -v D:\DockerImage\QhData\MySql57:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 mysql:5.7进入容器&#xff1a;docker exec -it mysql57001 …

检测如下MHA运行条件【踩坑记录】

【masterha_check_ssh --conf/etc/mha/app1.cnf&#xff1a;SSH免密登录】 【错误信息1】 [error][/usr/share/perl5/vendor_perl/MHA/SSHCheck.pm, ln111] SSH connection from root10.0.0.53(10.0.0.53:22) to root10.0.0.51(10.0.0.51:22) failed! 【错误反馈】就是服务器…

2024 软件测试面试题(800道)【附带答案】持续更新...

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

什么是数据分析思维

参考 一文学会如何做电商数据分析&#xff08;附运营分析指标框架&#xff09; 电子商务该如何做数据分析&#xff1f;如何数据分析入门&#xff08;从各项指标表象进入&#xff09; https://www.processon.com/outline/6589838c3129f1550cc69950 数据分析步骤 什么是数据分析…

HackTheBox - Medium - Linux - OnlyForYou

OnlyForYou OnlyForYou 是一台中等难度的 Linux 计算机&#xff0c;其特点是 Web 应用程序容易受到本地文件包含 &#xff08;LFI&#xff09; 的影响&#xff0c;该应用程序用于访问源代码&#xff0c;从而揭示盲目命令注入漏洞&#xff0c;从而导致目标系统上的 shell。该计…

k8s的二进制部署1

k8s的二进制部署&#xff1a;源码包部署 k8smaster01&#xff1a;192.168.176.61 kube-apiserver kube-controller-manager kube-scheduler etcd k8smaster01&#xff1a;192.168.176.62 kube-apiserver kube-controller-manager kube-scheduler node节点01&#xff1a;192.…

华清远见嵌入式学习——ARM——作业4

作业要求&#xff1a; 代码运行效果图&#xff1a; 代码&#xff1a; do_irq.c: #include "key_it.h" extern void printf(const char *fmt, ...); unsigned int i 0;//延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j);} }void do_i…

VScode安装Remix.js开发环境

目录 1 Remix.js介绍 2 远程连接方法 3 安装remix环境 4 设置根路由 5 编译运行 6 自己的helloworld 7 总结 书接上回&#xff0c;我们已经完成了vue的基本开发环境配置&#xff0c;并成功跑了第一个vue程序。下面我们要尝试安装remix.js的开发环境。 1 Remix.js介绍 …

00-Git 应用

Git 应用 一、Git概述 1.1 什么是Git git 是一个代码协同管理工具&#xff0c;也称之为代码版本控制工具&#xff0c;代码版本控制或管理的工具用的最多的&#xff1a; svn、 git。 SVN 是采用的 同步机制&#xff0c;即本地的代码版本和服务器的版本保持一致&#xff08;提…

Java中实现百度浏览器搜索功能

要在Java中实现百度浏览器搜索功能&#xff0c;你可以使用Selenium WebDriver。Selenium是一个用于自动化浏览器的工具&#xff0c;WebDriver是Selenium的一个子项目&#xff0c;它提供了一套API&#xff0c;可以直接与浏览器交互。 依赖: <dependencies><dependency…

【http】HTTP/1.0、HTTP/1.1和HTTP/2.0

✨ 专栏介绍 在当今互联网时代&#xff0c;计算机网络已经成为了人们生活和工作中不可或缺的一部分。而要实现计算机之间的通信和数据传输&#xff0c;就需要依靠各种网络协议来进行规范和约束。无论是浏览网页、发送电子邮件还是进行在线交流&#xff0c;都离不开各种各样的网…