十一、 ant-Design-Vue三种传值方法

本文讲述了在AntDesignVue中,通过事件驱动、数据属性直接传递和使用提供/inject进行组件间深度通信的三种常见传值策略。

1,第一种:事件传值

(1)src\views\gj\bid\pricelist\components\ProjectSelect.vue

定义事件:可以在子组件中发出事件,让父级组件接收数据,处理业务。

const emit = defineEmits(['select']);

/**

   * 设置当前选中的行,

   */

  function setSelectedKey(key: string, data?: object) {

    selectedKeys.value = [key];

    if (data) {

      emit('select', data);  //发出事件和数据

    }

  }

(2)接收事件数据,

src\views\gj\bid\pricelist\index.vue

<a-card :bordered="false" style="height: auto">

        <ProjectSelect @select="onProjectTreeSelect" />

      </a-card>

 3//处理函数,选中的项目

  let projectData = ref({});

  function onProjectTreeSelect(data) {

    console.log('--------------------data-'+JSON.stringify(data));

    console.log('--------------------data key-'+data.key);

    console.log('--------------------data leaf-'+data.isLeaf);

    projectData.value = data;      //接收数据data,触发projectData刷新tab子界面

    if(data.isLeaf===true){

      activeKey.value= "user-info"; //是叶子节点,触发改变激活所选择tab为当前"user-info"

    }else{

      activeKey.value= "base-info"; //不是叶子节点,触发改变激活所选择tab为当前base-info

    }

  }

(4)projectData触发子框内数据接收

      <a-card :bordered="false" style="height: auto">

        <DepartTree @select="onTreeSelect" :data="projectData"/>

      </a-card>

(5)子框中处理数据

src\views\gj\bid\pricelist\components\DepartTree.vue

//定义数据属性

  const props = defineProps({

    data: { require: true, type: Object },

  });

  // 当前选中的部门ID,可能会为空,代表未选择部门

  const projectId = computed(() => props.data?.id);

//监听数据变化

  watch(

    () => props.data,

    () => onSearch(unref(projectId))  //传入数据,触发查询

  );

2,第二种:数据属性传值

请参考上一篇博文,《vue页面上传文件与页面参数传递过程解析

3,第三种:向下子组件传值

  const { prefixCls } = useDesign('depart-user');

  provide('prefixCls', prefixCls);//发送数据

const prefixCls = inject('prefixCls');//接受数据

如:src\views\gj\project\GjProjectInfoList.vue中

const mainId = computed(() => (unref(selectedRowKeys).length > 0 ? unref(selectedRowKeys)[0] : ''));

//父级组件下发 mainId,让子组件接收

provide('mainId', mainId);

在子文件中接收数据

src\views\gj\project\GjProjectUploadbillList.vue

    //接收主表id

    const mainId = inject('mainId') || '';

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值