【Vue2和Vue3父子组件传值】

Vue2和Vue3父子组件传值

    • Vue2中的父子组件传参:
    • Vue3中的父子组件传参:
    • Vue2父子组件传值
      • vue2父传子
        • 父组件:
        • 子组件:
      • vue2子传父
        • 父组件:
        • 子组件:
    • Vue3父子组件传参
      • Vue3父传子
        • 父组件:
        • 子组件:
      • Vue3子传父
        • 父组件:
        • 子组件:

Vue2中的父子组件传参:

父传子

props:在父组件中,给子组件绑定一个自定义属性,在子组件中,通过props进行接收

子传父

自定义事件:在父组件中,给子组件绑定一个自定义事件,绑定事件的值为接收参数的函数,在子组件中,通过$emit发送数据

Vue3中的父子组件传参:

vue3中,新增了setup语法糖,父组件中引入子组件后,不需要注册可直接使用。父传子时,子组件中通过defineProps方法接收,子传父时,子组件中通过defineEmits方法发送。

Vue2父子组件传值

vue2父传子

在父组件中的子标签中定义一个 :属性名=属性值,在子组件中用props接收

父组件:

<template>
  <div>
    <div>父组件</div>
    <sonOne :msg="msg"></sonOne>
  </div>
</template>

<script>
import sonOne from "@/components/sonOne";

export default {
  name: "fatherView",
  components:{
    sonOne
  },
  data(){
    return{
      msg:'父组件传到子组件的值'
    }
  }

}
</script>

<style scoped>

</style>

子组件:

<template>
<div>
  子组件
  {{msg}}
</div>
</template>

<script>
export default {
name: "sonOne",
  props:{
    msg:[String,Number],
  },
  created() {
    console.log(this.msg)
  }
}
</script>

<style scoped>

</style>

vue2子传父

在父组件的子标签中写自定义事件,在子组件中用this.$emit(‘自定义事件名’,传递的值)传值

父组件:

<template>
  <div>
    父组件
    <sonTwo @change="change"></sonTwo>
  </div>
</template>

<script>
import sonTwo from "@/components/sonTwo";

export default {
  name: "fatherOneView",
  components: {
    sonTwo
  },
  methods:{
    change(data){
      console.log(data)
    }
  }
}
</script>

<style scoped>

</style>

子组件:

<template>
<div>
  子组件
  <button @click="click">按钮</button>
</div>
</template>

<script>
export default {
  name: "sonTwo",
  created() {

  },
  methods:{
    click(){
      this.$emit('change','子组件传到父组件的值')
    }
  }
}
</script>

<style scoped>

</style>

Vue3父子组件传参

Vue3父传子

在父组件中的子标签中定义一个 :属性名=属性值,在子组件中用defineProps接收

父组件:

<template>
  <div>
    父组件
    <sonOne :msg="msg"></sonOne>
  </div>
</template>

<script setup lang="ts">
import sonOne from '../components/sonOne.vue'
import {ref} from 'vue'
let msg = ref('父组件传给子组件的值')
</script>

<style scoped>

</style>

子组件:

<template>
  <div>
    子组件
    {{ msg }}
  </div>
</template>

<script setup lang="ts">
defineProps<{
  msg:[]
}>()

</script>

<style scoped>

</style>

Vue3子传父

在父组件的子标签中写自定义事件,在子组件中写一个点击事件,再定义emit,emit的第一个参数是父组件的方法,第二参数就是需要传递的值

父组件:

<template>
  <div>
    父组件
    <sonTwo @change="change">按钮</sonTwo>
    {{msg}}
  </div>
</template>

<script setup lang="ts">
import {ref} from 'vue'
import sonTwo from "../components/sonTwo.vue";
let msg = ref('')
const change = (data) => {
  console.log(data);
  msg.value = data
};
</script>

<style scoped>

</style>

子组件:

<template>
  <div>
    子组件
    <button @click="send">按钮</button>
  </div>
</template>

<script setup lang="ts">

const emit = defineEmits(['change'])
const send=()=>{
  emit('change','子组件传给父组件的值')
}

</script>

<style scoped>

</style>

你可能感兴趣的:(Vue.js,javascript,前端,vue.js)