首页 > 其他分享 >VUE里父组件与子组件的交互操作

VUE里父组件与子组件的交互操作

时间:2023-02-27 14:01:40浏览次数:30  
标签:VUE 传送数据 isAdd 里父 beforeAdd 事件 组件 emit


       在开发vue前端项目时,经常会遇到父组件与子组件之间的相互操作,比如有时候父组件需要知道子组件的触发事件,以便对这个触发事件进行响应,同时附组件也要传递数据给子组件等等

  一、子组件给父组件触发事件与传送数据

    在Vue.js中如果子组件需要给父组件传送数据,需要在子组件中定义一个自定义事件,事件名称不需要加括号。在子组件中通过$emit触发自定义事件,父组件使用v-on来监听事件。将需要传递的参数通过emit的第二个参数传递的。$emit方法的语法是:

    vm.$emit(eventName,[...args])
eventName是事件名,args是附加参数,这些参数回会传给监听器的回调函数。如果子事件需要向父组件传递数据,就可以通过第二个参数来传。

二、父组件传送数据给子组件

1.定义父组件
    1)父组件想要向子组件传值时,那么需要在子组件引入的地方绑定一个属性,属性值就是要传的数据,并且要在父组件中引入子组件。

    2)这个自定义属性的属性值是用来存放父组件向子组件传递的数据。

    3)在这里,如isAdd即是要传的数据,需要在data定义,所以当传递的数据时字符串类型时,可以在data定义为 isAdd:true

2.定义子组件
1)子组件使用props属性接收父组件传递过来的值。

写法是:

 props:{
    父组件自定义的属性:该值的类型,
    required:true
 }
三、实战例子

       需求是在出库单里增加子表单数据的数据的时候需要检测是否已经选择了仓库,否则提示先选择仓库,而且忽略增加子表单数据。

      1、子组件给父组件触发事件与传送数据

       因为在ErpSaleOutForm.vue里调用了下面子组件,同时绑定了一个beforeAdd事件

<!-- 子表单区域 -->
<a-tabs v-model="activeKey" @change="handleChangeTabs">
<a-tab-pane tab="销售出库单明细" :key="refKeys[0]" :forceRender="true">
<nbcio-editable-table
:ref="refKeys[0]"
v-on:beforeAdd="beforeAdd"
:isAdd="isAdd"
:loading="erpSaleOutDetailTable.loading"
:columns="erpSaleOutDetailTable.columns"
:dataSource="erpSaleOutDetailTable.dataSource"
:maxHeight="300"
:disabled="formDisabled"
:rowNumber="true"
:rowSelection="true"
:actionButton="true"/>
</a-tab-pane>
</a-tabs>

在props里增加下面数据

// 是否可以增加行数据
      isAdd: {
        type: Boolean,
        default: true
      },

同时在新增加子表单数据修改如下:

handleClickAdd() {
this.$emit('beforeAdd')
if (this.isAdd) {
let {addRowNum, addIndex, addScrollToBottom} = this.settings
if (addIndex <= 0) {
this.add(addRowNum, addScrollToBottom)
} else {
this.insert(addIndex, addRowNum, addScrollToBottom)
}
}
},

上面增加了一个给父组件this.$emit('beforeAdd')  这里没有数据传送,以后需要可以增加

2、父组件传送数据给子组件

beforeAdd() {
console.log("beforeAdd this.param.sc_id=",this.param.sc_id)
if (this.param.sc_id==='') {
this.$message.error('请先选择仓库!')
this.isAdd = false
return
}
},

在父组件ErpSaleOutForm.vue里增加上面的方法。

四、效果图

VUE里父组件与子组件的交互操作_表单

 

标签:VUE,传送数据,isAdd,里父,beforeAdd,事件,组件,emit
From: https://blog.51cto.com/u_15070324/6088407

相关文章

  • Go组件库总结之介入式链表
    本篇文章我们用Go封装一个介入式的双向链表,目的是将链表的实现和具体元素解耦。文章参考自:https://github.com/brewlin/net-protocol1.元素的接口typeElementinterface......
  • vue源码分析-动态组件
    前面花了两节的内容介绍了组件,从组件的原理讲到组件的应用,包括异步组件和函数式组件的实现和使用场景。众所周知,组件是贯穿整个Vue设计理念的东西,并且也是指导我们开发的......
  • 2023前端vue面试题汇总
    Vuex有哪几种属性?有五种,分别是State、Getter、Mutation、Action、Modulestate=>基本数据(数据源存放地)getters=>从基本数据派生出来的数据mutations=>提交......
  • vue源码分析-响应式系统(一)
    从这一小节开始,正式进入Vue源码的核心,也是难点之一,响应式系统的构建。这一节将作为分析响应式构建过程源码的入门,主要分为两大块,第一块是针对响应式数据props,methods,da......
  • 前端vue面试题(持续更新中)
    vue-router中如何保护路由分析路由保护在应用开发过程中非常重要,几乎每个应用都要做各种路由权限管理,因此相当考察使用者基本功。体验全局守卫:constrouter=createR......
  • #甘特图# DHTMLXGantt 组件笔记
    配置配置缩放单位gantt.config.scale,示例gantt.config.scale=[{unit:"day",step:1,format:"%d%M"}]需要注意的是,当显示比较小的刻度如天、小时甚至时分钟......
  • 组件内路由守卫
    简介:作用:给组件设置权限beforeRouteEnter(to,from,next){通过路由规则,进入该组件时被调用},beforeRouteLeave(to,from,next){通过路由规则,离开该组件时被调用},......
  • Vue 基础
    模板语法Vue使用一种基于HTML的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的DOM上。所有的Vue模板都是语法层面合法的HTML,可以被符合规范的浏览器......
  • vue的两种服务器端渲染方案
    作者:京东零售姜欣关于服务器端渲染方案,之前只接触了基于react的Next.js,最近业务开发vue用的比较多,所以调研了一下vue的服务器端渲染方案。首先:长文预警,下文包括了两种方......
  • 调用兄弟组件的方法
    调用兄弟组件的方法使用场景:在第一个子组件中点击列表的信息时,第二个子组件执行查询接口。使用方法:在第一个子组件执行点击事件时,通过子传父方法传第二个子组件需要的值......