vue父子组件之间的传值 - 子向父传值

  • 组件是可复用的 Vue 实例,且带有一个自行定义的名字:在这个例子中是 childTemplate
    此次为实现通过点击子组件内的按钮触发方法,将子组件的值传递给父组件使得父组件数据内容改变

    对于子组件向父组件传值用简单的话来说,就是父组件在子组件上使用v-on绑定自定义方法名,子组件使用$emit触发父组件绑定的的事件并且传值

在vue中,父子组件的关系可以总结为prop向下传递,事件向上传递。父组件通过prop给子组件下发数据,子组件则是通过事件给父组件发送信息。
关于$emit的更多解释参考官网文档:vue 自定义事件

父组件代码内容

<template>
  <div id="app">
    <h2>这是父组件</h2>
    <p>在父组件内展示tableData的内容</p>
    <p>{{tips}}</p>
    <div class="parent">
      <div v-for="(item,key) in tableData" :key="key">
        <p>{{item.name}}</p>
        <p>{{item.date}}</p>
        <p>{{item.title}}</p>
      </div>
  </div>
  <br>
    <!-- 使用v-on(缩写@)在子组件上绑定父组件的方法 -->
    <childTemplate  @changeData =  changeData />
    <!--            ↑ 自定义名字   ↑ 父组件内方法名 -->
  </div>
</template>

<script>
// 引入子组件
import childTemplate from './views/children.vue'
export default {
  data(){
    return{
      tableData: [{
            date: '2020-06-29',
            name: '王皮皮',
            title: '在家小霸王,出门小王八'
          }, {
            date: '2020-06-29',
            name: '王皮皮',
            title: '在家小霸王,出门小王八'
          }, {
            date: '2020-06-29',
            name: '王皮皮',
            title: '在家小霸王,出门小王八'
          }, {
            date: '2020-06-29',
            name: '王皮皮',
            title: '在家小霸王,出门小王八'
          }],
          tips:''
    }
  },
  // 组件注册
  components:{
    childTemplate
  },
  // 方法
  methods:{
    // 该方法传入两个参数改变原来的值
      changeData(data,tips){
        this.tableData = data
        this.tipe = tips
      }
  }
}
</script>
<style scoped>
    #app {
      width: 1000px;
      margin: 0 auto;
    }
    .parent{
    width: 1000px;
    display: flex;
    justify-content: space-between;
    align-items: center;
  }
  .parent div{
    width: 160px;
    height: 150px;
    padding: 5px;
    font-size: 14px;
    border: 1px solid #ccc;
  }
</style>

子组件代码内容

  • 子组件通过$emit触发父组件上绑定的方法
<template>
  <div class="child-content">
  这是子组件的内容  <i>(灰色背景部分)</i>
  <p>通过点击子组件内触发父组件的方法改变父组件的值</p>
  <br>
  <button @click="changeData">点击改变父组件的数组内容</button>
  </div>

</template>

<script>

export default {
  methods:{
    changeData(){
        // 使用$emit触发当前实例上的事件。附加参数都会传给监听器回调。
        let data = [{
            date: '2020-07-01',
            name: '王皮皮',
            title: '正式的拥有一个家'
        }]
        // 使用$meit调用父组件在子组件上绑定的自定义方法changeData,并且传入两个参数
        this.$emit('changeData',data,'数组改变了')
    }
  }
}
</script>
<style scoped>
  .child-content{
    width: 1000px;
    padding: 20px;
    background-color: #f1f1f1;
  }

</style>

以上代码运行示例图

点击按钮前

在这里插入图片描述
点击按钮后

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中,父组件与子组件之间传值有多种方式: 1. Props: 父组件通过props向子组件传递数据。在父组件中使用子组件时,可以通过属性的形式将数据传递给子组件。子组件通过props选项来接收父组件传递的数据。例如: ```vue // 父组件 <template> <div> <child-component :message="parentMessage"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { parentMessage: 'Hello from parent' }; } }; </script> // 子组件 <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { props: ['message'] }; </script> ``` 2. $emit: 子组件通过$emit方法向父组件发送事件,并携带需要传递的数据。父组件监听子组件触发的事件,并在事件处理函数中获取子组件传递的数据。例如: ```vue // 父组件 <template> <div> <child-component @custom-event="handleCustomEvent"></child-component> <p>Message from child: {{ childMessage }}</p> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { childMessage: '' }; }, methods: { handleCustomEvent(message) { this.childMessage = message; } } }; </script> // 子组件 <template> <div> <button @click="sendMessage">Send Message to Parent</button> </div> </template> <script> export default { methods: { sendMessage() { this.$emit('custom-event', 'Hello from child'); } } }; </script> ``` 这些是Vue父子组件之间传值的两种常见方式,根据具体场景选择合适的方式进行数据传递。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值