【Vue】学习笔记-组件传值

前言

组件之间的传值可以分为三种:

1.父级向子级传递数据

2.子级向父级传递数据

3.非父子级传递数据

本文主要讲解父级向子级传递数据和子级向父级传递数据这两种

1.父级向子级传递数据

父级向子级传递数据:使用属性传递
1)在App组件中,绑定msg属性传递给Child内部(:msg=“message”)data()中message:“app.vue data”

2)Child获取信息用props:[“msg”](数组字符串,msg为App组件传的组件名)

3)Child中template绑定表达式msg

App.vue代码为:

<template>
  <div>
    <h1>hello world</h1>
    <child :msg="message"></child>
  </div>
</template>
<script>
//父级向子级传递数据:使用属性传递
import Child from "./components/Child.vue"
export default {
  //注册组件
  components:{
    Child
  },
  data(){
    return{
      message:"app.vue data"
    }
  },
  methods:{
  }
}
</script>

Child.vue代码为:

<template>
  <div>
      <h1>我是Child组件</h1>
      <h1>{{msg}}</h1>
  </div>
 
</template>

<script>
export default {
    props:["msg"]
}
</script>

2.子级向父级传递数据

子级向父级传递数据:用自定义事件
子级中建立一个组件button,点击button后,把子级的message数据传给父级,然后父级的hello world变成子级的数据
详细步骤:
1)在父级App.vue中的中先自定义一个事件 @myevent=“changeData"然后在methods里定义一个changeData()方法把hello变成子级的数据,h1中为childData,在methods中定义data中初始值为childData:”",用changeData()获取子级的数据

2)在Child中触发事件,Child.vue中写sendData()方法,在Child.vue中button点击click执行sendData来实现传递数据,在sendData中用 this.$emit 方法可以触发父级的自定义事件,this.$emit("myevent"),在子级中data()返回childData数据为"I’m child".同时this.$emit("myevent",this.childData)把数据传给myevent

3)在App.vue中myevent调用的是changeData在方法中changeData(childData){this.childData = childData}

4)点击子级按钮“传递数据”父级标签出现"I’m child"
父级App.vue代码如下

<template>
  <div>
    <h1>{{childData}}</h1>
    <child @myevent="changeData" :msg="message"></child>
  </div>
</template>
<script>
//父级向子级传递数据:使用属性传递
import Child from "./components/Child.vue"
export default {
  //注册组件
  components:{
    Child
  },
  data(){
    return{
      message:"app.vue data",
      childData:''
    }
  },
  methods:{
    changeData(childData){
      this.childData=childData;
    }
  }
}
</script>

子级Child.vue代码如下

<template>
  <div>
      <h1>我是Child组件</h1>
      <h1>{{msg}}</h1>
      <button @click="sendData">传递数据</button>
  </div>
 
</template>

<script>
//子级向父级传递数据:用自定义事件
export default {
    props:["msg"],
    data(){
        return{
            childData:"I'm child"
        }
    },
    methods: {
        sendData(){
            this.$emit("myevent",this.childData)
        }
    },
}
</script>

显示结果:
在这里插入图片描述

点击传递数据,出现I’m child

常见错误总结

父级向子级传递数据时child的标签要写在APP.vue组件中,写在Child.vue中会报错如下:

在这里插入图片描述

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue组件中,v-model可以用于实现子组件与父组件之间的双向数据绑定。具体的传值过程如下: 1. 在子组件中,使用props来定义需要接收的value参数。例如props: { value: [String, Object] }。 2. 在子组件中,使用watch来深度监听value的变化。可以设置immediate为true,以便在初始化时立即改变监听的值。例如watch: { value: { handler: function(val, oldVal) { this.videoForm.showVideoPath = val; }, deep: true, immediate: true } }。 3. 子组件中的某个事件(例如上传成功的回调函数)需要通过$emit("input", 值)来将值传递给父组件的v-model。例如this.$emit("input", res.url)。 在父组件中,使用v-model来绑定子组件的值。例如<video-upload v-model="form.videoDz" />。 总结起来,v-model传值的过程包括在子组件中定义props来接收value参数,在watch中监听value的变化,并通过$emit("input", 值)来将值传递给父组件的v-model。在父组件中使用v-model来绑定子组件的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue——父子组件通过v-model传值和显示](https://blog.csdn.net/weixin_42247720/article/details/127650801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue父子组件v-model传值](https://blog.csdn.net/libinemail/article/details/123826501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值