怎样操作Vue表单类父子组件数据传递

这次给大家带来怎样操作Vue表单父子组件数据传递,操作Vue表单类父子组件数据传递的注意事项有哪些,下面就是实战案例,一起来看一下。

使用Vue.js进行项目开发,那必然会使用基于组件的开发方式,这种方式的确给开发和维护带来的一定的便利性,但如果涉及到组件之间的数据与状态传递交互,就是一件麻烦事了,特别是面对有一大堆表单的页面。

在这里记录一下我平时常用的处理方式,这篇文章主要记录父子组件间的数据传递,非父子组件主要通过Vuex处理,这篇文章暂时不作说明。

与文档里给的方案一样,父组件向子组件传递数据主要通过 props,子组件向父组件传递数据主要通过触发器 $emit(),只是在用法上会有些不同。

1、传递基本类型数据

当子组件内容较少时,会直接传递基本类型数据,通常为String, Number, Boolean三种。

先看个例子:

  

问卷调查

姓名:{{form.name}}

import child from './child.vue' export default { components: { child }, data () { return { form: { name: '请输入姓名' } } } }

登录后复制

  

export default { props: { // 这个 prop 属性必须是 valule,因为 v-model 展开所 v-bind 的就是 value value: '' }, methods: { changeName (e) { // 给input元素的 input 事件绑定一个方法 changeName // 每次执行这个方法的时候都会触发自定义事件 input,并且把输入框的值传递进去。 this.$emit('input', e.target.value) } } }

登录后复制

给子组件的 input 事件绑定一个方法 changeName,每次执行这个方法的时候都会触发自定义事件 input,并且把输入框的值传递进去。

父组件通过 v-model 指令绑定一个值,来接收子组件传递过来的数据。但这样只是父组件响应子组件的数据,如果还要子组件响应父组件传递的数据,就需要给子组件定义一个props属性 value,并且这个属性必须是 value,不能写个其它单词。

v-model 其实就是一个语法糖,详情可以参考使用自定义事件的表单输入组件。

2、传递引用类型数据

当子组件里的内容比较多时,比如子组件有多个表单元素,如果还像上面那样给每个表单元素绑定值,那就要写很多重复代码了。所以这个时候通常传递的是一个对象,传值的基本原理不变,不过写法上会有些不同。

还是先看代码:

  

问卷调查

姓名:{{form.name}}

import child from './child.vue' export default { components: { child }, data () { return { form: { name: '请输入姓名', age: '21' } } } }

登录后复制

  

export default { data () { return { form: { name: '', age: '', address: '' } } }, props: { // 这个 prop 属性接收父组件传递进来的值 formData: Object }, watch: { // 因为不能直接修改 props 里的属性,所以不能直接把 formData 通过v-model进行绑定 // 在这里我们需要监听 formData,当它发生变化时,立即将值赋给 data 里的 form formData: { immediate: true, handler (val) { this.form = val } } }, mounted () { // props 是单向数据流,通过触发 update 事件绑定 formData, // 将 data 里的 form 指向父组件通过 formData 绑定的那个对象 // 父组件在绑定 formData 的时候,需要加上 .sync this.$emit('update:formData', this.form) } }

登录后复制

props 是单向数据流,当我们需要对 props 内的属性进行双向绑定时,就需要用到.sync 修饰符,详情请参考.sync 修饰符,这里不做赘述。

这里需要注意的是,vue 中是不能直接修改 props 的,所以如果我们要向父组件传值,还是需要通过修改 data 里的值,prop 只是作为父子之间通话的中间人存在。

另外,如果我们想要预览父组件最开始传的数据,就需要通过 watch 监听 prop 的变化,在子组件初始化的时候就把值传进去。

注意: 我在子组件里把 this.$emit(‘update:formData’, this.form) 放在 mounted 当中的,其原因是为了避免在每个 input 标签的 input 事件中触发自定义事件,但这样写的前提是,父子组件都要共用一个对象。

这也就是上面代码中,父组件中使用 :formData.sync=”form” 绑定值时,form 是一个对象,而子组件中的触发自定义事件 this.$emit(‘update:formData’, this.form) ,this.form 也得是一个对象。

这里还需要注意的是,如果有多个子组件使用一个对象,那就要避免这种写法,因为一个组件修改了这个对象的数据,那么其它子组件也就都跟着改变了。

所以我在用的时候都是给每个子组件分配了一个自己的对象,比如:

data () { return {  parentObject: {   child_1_obj: {},   child_2_obj: {},  } }}

登录后复制

这是在父组件里定义的数据,当然名字不会这样取了。

结尾

也没什么说的了,对 Vue 还是处于使用的阶段,对其底层的东西了解还不够,我也好想读读源码,但总只是想想…..大家觉得有什么不妥的地方尽管说,大家相互交流交流。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

使用JS判断字符串中包含内容方法总结

立即学习“前端免费学习笔记(深入)”;

JS+HTML5实绑定鼠标事件的粒子动画

以上就是怎样操作Vue表单类父子组件数据传递的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2752058.html

(0)
上一篇 2025年3月8日 06:06:41
下一篇 2025年2月18日 13:26:28

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何使用Vue实现PopupWindow组件

    这次给大家带来如何使用Vue实现PopupWindow组件,使用Vue实现PopupWindow组件的注意事项有哪些,下面就是实战案例,一起来看一下。 这段时间一直在学习前端技术来完成自己的小项目。在js方面就使用了Vue框架。由于在项目里…

    2025年3月8日
    200
  • 怎样进行vue弹窗组件使用

    这次给大家带来怎样进行vue弹窗组件使用,vue弹窗组件使用的注意事项有哪些,下面就是实战案例,一起来看一下。 弹窗是一个项目必备的复用利器,所以封装起来,保证项目ui一致,是很有必要的。学了一段时间vue,想想还是用vue写一下吧。用的很…

    编程技术 2025年3月8日
    200
  • 怎样使用Vue组件

    这次给大家带来怎样使用Vue组件,使用Vue组件的注意事项有哪些,下面就是实战案例,一起来看一下。 Vue实例 项目启动过程 看一下现在我们的项目,想想整个项目的启动过程是什么(以直接打开index.html的方法访问为例来说明)? 你首先…

    编程技术 2025年3月8日
    200
  • 如何使用vue弹窗消息组件

    这次给大家带来如何使用vue弹窗消息组件,使用vue弹窗消息组件的注意事项有哪些,下面就是实战案例,一起来看一下。 本来打算写一个那种提示完了自动消失的弹窗的,但是没有想好淡入淡出的效果。所以暂时算是半成品。 练习代码如下: ys-aler…

    编程技术 2025年3月8日
    200
  • 如何使用vue组件实现弹出框点击显示隐藏

    这次给大家带来如何使用vue组件实现弹出框点击显示隐藏,使用vue组件实现弹出框点击显示隐藏的注意事项有哪些,下面就是实战案例,一起来看一下。 本文实例为大家分享了vue实现弹出框点击显示隐藏的具体代码,供大家参考,具体内容如下 效果如下图…

    2025年3月8日
    200
  • 在vue中slot如何实现在子组件中显示父组件传递的模板(详细教程)

    这篇文章主要介绍了vue slot 在子组件中显示父组件传递的模板,需要的朋友可以参考下 父组件使用没有指定slot属性,默认为default 在slot中可以使用默认值,如果父组件没有传递对应的slot,则会显示默认值 nbsp;html…

    2025年3月8日
    200
  • 如何使用react创建单例组件

    这次给大家带来如何使用react创建单例组件,使用react创建单例组件的注意事项有哪些,下面就是实战案例,一起来看一下。 需求背景 最近有个需求,需要在项目中添加一个消息通知弹窗,告知用户一些信息。 用户看过消息后,就不再弹窗了。 问题 …

    编程技术 2025年3月8日
    200
  • 你必须要注意的vue组件使用细节

    这次给大家带来你必须要注意的vue组件使用细节,vue组件使用细节的注意事项有哪些,下面就是实战案例,一起来看一下。 细节一 基础例子 运行结果: 以上大家都懂,这边就不多说,回到代码里,有时候我们需要 tbody 里面每一行是一个子组件,…

    2025年3月8日 编程技术
    200
  • 如何处理父组件中vuex方法更新state子组件不能及时更新渲染

    这次给大家带来如何处理父组件中vuex方法更新state子组件不能及时更新渲染,处理父组件中vuex方法更新state子组件不能及时更新渲染的注意事项有哪些,下面就是实战案例,一起来看一下。 场景: 我实际用到的是这样的,我父组件引用子组件…

    2025年3月8日
    200
  • 在vue中如何实现封装可复用的组件

    下面我就为大家分享一篇在vue中封装可复用的组件方法,具有很好的参考价值,希望对大家有所帮助。 本次封装的组件以toast组件为例 以前使用移动端ui插件时,通过一句代码比如 $.toast( ‘ 需要显示的内容 ‘ ),从而在…

    2025年3月8日
    200

发表回复

登录后才能评论