父组件向子组件传值:
parent.vue
<template>
<div>
<!-- 第三步:使用子组件 -->
<child :toChild="msg"></child>
<!-- 第四步:绑定一个变量,用它来传递要传的值 -->
</div>
</template>
<script>
// 第一步:导入子组件
import child from '@/components/child'
export default {
name: 'parent',
data () {
return {
// 这是要传值的值
msg: '送给子组件的值'
}
},
components: {
// 第二步:注册子组件
child
}
}
</script>
chile.vue
<template>
<div>
<!-- 第二步:这个值就可以展示了 -->
{{toChild}}
</div>
</template>
<script>
export default {
name: 'child',
props: {
// 第一步:
// 定义一个变量,用来接收父组件传过来的值
// 父组件用什么传,这边就用什么接收
toChild: ''
}
}
</script>
这里要注意的是第四步。
<子组件 :车子="货物"></子组件>
父组件用车子运货,子组件也要用车子接货。
props: {
// 父组件用什么传,这边就用什么接收
车子: ''
}
子组件向父组件传值:
child.vue
<template>
<div class="child">
<button @click="toParent">点击</button>
</div>
</template>
<script>
export default {
name: 'child',
data () {
return {
// 要传给父组件的值
msg: '送给父组件的值'
}
},
methods: {
// 第一步:定义一个方法,作为传值的触发条件
toParent: function () {
// 第二步:通过 this.$emit 传值
this.$emit('sendData', this.msg)
// 第一个参数为父组件监听子组件的事件,第二个参数为要传的值
// 可以传多个值
}
}
}
</script>
parent.vue
<template>
<div class="parent">
<h1>{{ msg }}</h1>
<!-- 使用子组件 -->
<child @sendData="getData"></child>
<!-- 第一步: -->
<!-- 给子组件绑定一个事件,用来监听子组件 -->
<!-- 事件被触发时,就通过绑定的方法接收子组件的传值 -->
</div>
</template>
<script>
// 导入子组件
import child from '@/components/child'
export default {
name: 'parent',
data () {
return {
// 定义一个变量接收子组件的传值
msg: ''
}
},
components: {
// 注册子组件
child
},
methods: {
// 第二步:
// 定义一个方法,接收子组件的传值
getData: function (content) {
this.msg = content
}
}
}
</script>
这里要注意的就是这个绑定的事件,子组件给父组件传值,不是直接就能接收的,这个事件就是父组件用来监听子组件的,父组件监听到子组件传值,才会接收。
打个比方,儿子给父亲送东西,不能说直接扔给父亲,他得先给父亲打个招呼,父亲听到这个招呼后,再接收这个东西,就是这么一回事儿。
这下组件传值和非组件传值都没问题拉。