vue父子组件之间传值的方法

这篇具有很好参考价值的文章主要介绍了vue父子组件之间传值的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue父子组件之间传值的方法

一、基本父子传值

父传子

方式:

props

效果:

把父组件的fatherName属性传入子组件,在子组件中使用

父组件代码:
<template>
  <div>
    父组件:{{fatherName}}
    <SonVue :fatherName="fatherName"></SonVue>
  </div>
</template>
子组件代码:
<template>
    <div>
        子组件:{{fatherName}}
    </div>
</template>

<script>
export default {
   props:['fatherName']
}
</script>

子传父

方式:

$emit

效果:

在子组件触发事件,修改父组件的fatherName属性

父组件代码:
父组件
<template>
  <div>
    父组件:{{fatherName}}
    <SonVue @sendChangeName="ChangeName"></SonVue>
  </div>
</template>
<script>
import SonVue from './components/Son.vue';
export default {
  data(){
    return {
      fatherName:'yj'
    }
  },
  methods:{
    ChangeName(v){
      this.fatherName = v
    }
  },
  components:{
    SonVue
  }
}
</script>
子组件代码:
<template>
    <div>
        子组件:
        <button @click="ChangeName">修改父组件的fatherName</button>
    </div>
</template>

<script>
export default {
   methods: {
    ChangeName(){
        this.$emit('sendChangeName','yj666')
    }
   }
}
</script>

兄弟传值

方式:

eventBus.js

效果:

任意组件之间相互传值

代码:

二、ref 父传子

方式:

$refs

效果:

把父组件的fatherName属性传入子组件,在子组件中使用

父组件代码:
<template>
  <div>
    父组件:{{fatherName}}
    <SonVue ref="dom"></SonVue>
    <button @click="$refs.dom.fatherName = 'yj666'">传递新值</button>
  </div>
</template>
子组件代码:
<template>
    <div>
        子组件:{{fatherName}}
    </div>
</template>
<script>
export default {
   data(){
    return {
        fatherName:''
    }
   }
}
</script>

三、v-model 父子传值

方式:

在父组件中使用 v-model

效果:

父子组件之间相互传值

解释:

v-model 的父子传值模式 其实是 绑定的 value 属性和 input 事件的语法糖,可以由 props+$emit 模式演变而来

props+$emit:
父组件代码:
<template>
  <div>
    父组件:{{fatherName}}
    <SonVue :fatherName="fatherName" @sendChangeName="ChangeName"></SonVue>
  </div>
</template>
<script>
import SonVue from './components/Son.vue';
export default {
  data(){
    return {
      fatherName:'yj'
    }
  },
  methods:{
    ChangeName(v){
      this.fatherName = v
    }
  },
  components:{
    SonVue
  }
}
</script>
子组件代码:
<template>
    <div>
        子组件:{{fatherName}}
        <button @click="ChangeName">修改父组件的fatherName</button>
    </div>
</template>

<script>
export default {
   props:['fatherName'],
   methods: {
    ChangeName(){
        this.$emit('sendChangeName','yj666')
    }
   }
}
</script>
核心代码改造:
<SonVue :fatherName="fatherName" @sendChangeName="ChangeName"></SonVue>
<!-- 
改造:修改变量名和事件名
1. 把fatherName改造为value
2. 把自定义事件sendChangeName改造为input
3. 把事件ChangeName改造为fn
4. 进一步把事件ChangeName改造为 value => value = v
5. 或者  把事件ChangeName改造为 value = $event
-->

<SonVue :value="value" @input="v => value = v"></SonVue>
<SonVue :value="value" @input="value = $event"></SonVue>

<!--
联想:v-model 其实也可以由绑定事件:value="value" + 事件监听 @input="v => value = v" 组成
意味着: :value="value" @input="v => value = v" 可以替换为 v-model = ‘value’
效果:将父组件属性 vlaue 值传递到子组件中使用,并子组件触发自定义事件 input 来改变父组件中 value 的值
-->

<SonVue v-model="value"></SonVue>
v-model
父组件代码:
<template>
  <div>
    父组件:{{value}}
    <SonVue v-model="value"></SonVue>
  </div>
</template>

<script>
import SonVue from './components/Son.vue';
export default {
  data(){
    return {
      value:'yj'
    }
  },
  components:{
    SonVue
  }
}
</script>
子组件代码:
<template>
    <div>
        子组件:{{value}}
        <button @click="$emit('input','yj666')">修改父组件的value</button>
    </div>
</template>

<script>
export default {
   props:['value']
}
</script>
问题:
  • 父组件变量只能叫 value
  • 子组件自定义事件只能叫 input
解决:

通过设置 子组件 身上的model属性,来更改变量名name和自定义事件input的问题

model:{
    prop: 'newValue',
    event: 'newInput'
}
父组件代码:
<template>
  <div>
    父组件:{{newValue}}
    <SonVue v-model="newValue"></SonVue>
  </div>
</template>

<script>
import SonVue from './components/Son.vue';
export default {
  data(){
    return {
      newValue:'yjj'
    }
  },
  components:{
    SonVue
  }
}
</script>
子组件代码:
<template>
    <div>
        子组件:{{newValue}}
        <button @click="$emit('newInput','yj666')">修改父组件的value</button>
    </div>
</template>

<script>
export default {
   props:['newValue'],
   model:{
       prop: 'newValue',
       event: 'newInput'
   }
}
</script>
优势:

v-model模式父子传值比props+$emit模式更加简单

缺点:

不能够一次传递多个属性,通过方法四可以处理

四.sync修饰符 父子传值

方式:

在父组件中使用 绑定修饰符 :newValue.sync = ‘newValue’

效果:

父子组件之间相互传值

解释:

.sync 的父子传值模式 其实是绑定的属性和事件的语法糖

:val.sync = ‘val’ 等价于 :val"val" @update:val = “val = $event”文章来源地址https://www.toymoban.com/news/detail-699960.html

props+$emit 模式核心代码:
父组件代码改造:
<SonVue :fatherName="fatherName" @sendChangeName="ChangeName"></SonVue>
<!-- 
第一次父改造:修改自定义事件名和事件内容
1. 把自定义事件sendChangeName改造为update(此时可以任意命名)
2. 把事件名ChangeName改造为具体代码 fatherName = $event
-->
<SonVue :fatherName="fatherName" @update="value = $event"></SonVue>
<!-- 
第二次父改造:
1. 去掉 @update="value = $event"
2. 加入.sync修饰符
-->
<SonVue :fatherName.sync="fatherName"></SonVue>
子组件代码改造:
<button @click="ChangeName">修改父组件的fatherName</button>
<!-- 
第一次子改造:修改事件内容
1. 把自定义事件sendChangeName改造为$emit('newValue','yj666')
-->
<button @click="$emit('newValue','yj666')">修改父组件的value</button>
<!-- 
第二次子改造:确保和父组件事件挂钩(第二次改造时去掉的事件和内容)
1. 在$emit('newValue','yj64666')的属性前,加入事件名update (此时必须是update的事件名)
-->
<button @click="$emit('update:newValue','yj64666')">修改父组件的value</button>

到了这里,关于vue父子组件之间传值的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • vue组件间传值的六种方法

    vue组件间传值的六种方法

    父组件代码: 子组件代码: 页面显示: 子组件代码: 父组件代码: 页面显示: 父子组件传值原理:父子组件的关系可以总结为 prop 向下传递,事件向上传递。父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息,如下图所示: ref:如果在普通的 DOM 元素

    2024年02月15日
    浏览(13)
  • Vue3中子组件向父组件传值的方法

    父组件可以通过props向子组件传值, 子组件可以用过 emits(‘update:prop’, propValue) 修改父组件绑定在此Prop上父组件的值 本文演示了一个可以缓存分页大小(每页显示几行数据)的分页组件的使用, 它是对el-pagination做了一个简单的封装 如下是一个分页组件 核心: 在换页时通过 emit

    2024年02月16日
    浏览(14)
  • 【微信小程序】父子组件之间传值

    【微信小程序】父子组件之间传值

    1. 父组件向子组件 传值 2. 子组件向父组件 传值 父向子传值使用的是 属性绑定 ,子组件中的 properties 对象进行接收父组件传递过来的值。 子向父传值使用的是 自定义事件 ,父组件通过自定义事件中的 事件对象e 来接收子组件传递过来的值。 1.1 在父组件的.json文件中导入子

    2024年02月16日
    浏览(12)
  • vue2和vue3 子组件父组件之间的传值方法

    在组件化开发的过程中难免会遇见 子组件和父组件之间的通讯那么这里讲关于vue2和vue3不同的通讯方式 先看一下vue2 父组件向子组件传递参数 父组件通过 : 语法 其实就是v-bind 来传递参数 子组件通过 props 来获取父组件传递的方法 亿点小知识:子组件接收到数据之后,不能直接

    2024年02月09日
    浏览(12)
  • vue3 父子组件传值 记录

    vue3 父子组件传值 记录

    最近这个组件之间传值用的较多,我这该死的记性,总给忘记写法,特此记录下 补充:LeftView.vue 是父组件; Video.vue 是子组件 Video.vue 子组件 LeftView.vue 父组件 第一步 创建bus.js文件 第二步 分别在需要相互传参的组件中引入bus.js文件,并相互传参

    2024年02月11日
    浏览(12)
  • vue父子组件传值不能实时更新

    vue父子组件传值不能实时更新

    最近做项目,遇到个大坑,这会爬出来了,写个总结,避免下次掉坑。 vue父子组件传值不能实时更新问题,父组件将值传给了子组件,但子组件显示的值还是原来的初始值,并没有实时更新,为什么会出现这种问题呢? 出现这个问题,可能有以下两个原因: 一、 父组件没有

    2024年02月16日
    浏览(11)
  • Vue父子组件值的传递【极简版】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 在Vue.js中,父组件向子组件传递值通常通过props(属性)来实现。以下是一种典型的方法: 在父组件中,可以使用子组件的标签,并通过props属性将数据传递给子组件

    2024年01月24日
    浏览(16)
  • uniapp父子组件传值三种方法

    uniapp,父组件向子组件传值有三种方法,分别为props、slot,和ref props 这个应该是最简单最常用的方法,就是子组件写变量,然后把变量名字在js中进行props slot 插值比较灵活,可以在任何需要写入的地方进行slot ,slot写入name标签后,在父组件进行插值#name ref 函数控制 这个是

    2024年02月13日
    浏览(9)
  • vue父子组件传值(v-model)

    子组件使用 props 接收父组件传来的值 1)这里有个大坑, el-dialog 中一定要用 model-value 来代替 v-model ,不能用 v-model ,否则会报错 (2)子组件中修改父组件传入的参数 visible 时,使用 👇方式

    2024年02月11日
    浏览(12)
  • Vue3 TS写法 父子组件传值(通讯)

    父组件: 子组件: 通过defineProps来接受数据(无须引入直接使用即可) 子组件可写默认值也可以不写两种情况 子组件通过defineEmits派发一个事件 (一样无须引入直接使用即可)  父组件接受子组件的事件 chilFun

    2024年02月15日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包