lemooljiang avatar

Vue中父子组件的互动 / 网络研习社#70

lemooljiang

Published: 16 Sept 2020 › Updated: 16 Sept 2020Vue中父子组件的互动 / 网络研习社#70

Vue中父子组件的互动 / 网络研习社#70

son.jpg

Vue通常是采用组件的形式开发,这种模块化的思想大大加快了开发的进度。如上图所示,这种弹窗是典型的父子组件的设计,它们之间是如何共享数据的呢?

父组件向子组件传值传方法

分两步走:

  1. 在父组件中动态绑定属性,:parentmsg='msg'
  2. 子组件中通过 props: 获取。
    传方法也是差不多步骤.
//App.vue传值给Header.vue
//App.vue中的写法
<template>
  <div id="app">
    <Header :parentmsg="title" :func="parfun"></Header>
  </div>
</template>

<script>
  import Header from '@/components/Header'
  export default {
    name: 'App',
    data(){
      return {
        title: '父组件中的数据'
       }
    },
    methods:{
      parfun(){
        console.log('这是父方法')
      }
      },
    components: {
      Header
    }
  }
</script>

// Header.vue的写法
//在props中接受后可以直接使用
<template>
  <div>
   {{ parentmsg }}
  <button @click="func"></button>
  </div>
</template>
<script>
    export default {
      name: "Header",
      props: ['parentmsg', 'func']
    }
</script>

父组件主动获取子组件数据和方法

主要是通过 $refs 获取子组件对象

  1. 绑定属性
  2. 获取子组件对象
 //Test.vue
 data(){
  return {
    str:'',
    sonmsg: '这是子数据'
  }
},

// App.vue
<Test ref="sonmsg"></Test>  // 1. 
mounted() {
  console.log(566, this.$refs.sonmsg.sonmsg) // 2. 获取子组件对象
}

子组件向父组件主动传值

1. 
<Test> @changea = "changea" ></Test>
changea(val){
  console.log(599, "val", val)
},

2. Test
test(){
  this.$emit('changea',1)
}

3. changea

父子组件的互动基本就概括在以上三种情况了,这些是在同一个页面中的方法。如果是不同页面要共享数据,那么可以使用Vuex, Cookie, localStorage这三种方法来实现。除此之外,还有一种前端数据库IndexedDB可以使用,可以很好地在前端中使用。

Leave Vue中父子组件的互动 / 网络研习社#70 to:

Written by

Designer , Poet , Technology enthusiasts

Read more #cn posts


Best Posts From lemooljiang

We have not curated any of lemooljiang's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From lemooljiang