前言
vue项目中,组件跟组件之间数据的传递是很普遍的行为,在这里总结几种常见的vue组件跟组件之间传值方式,其中,主要有父子组件,非父子组件传值。
父组件向子组件传值
方法:父组件内设置要传的数据,在父组件中引用的子组件上绑定一个自定义属性并把数据绑定在自定义属性上,在子组件添加参数props接收即可。具体可参考官方文档。
父组件传递参数代码如下:
<template>
<center-template :form='userinfo'></center-template>
</template>
<script>
import CenterTemplate from '../../components/admin/userCenterTemplate'
export default {
components: {
'center-template': CenterTemplate
},
data () {
return {
userinfo: {name: 'jack'}
}
},
}
</script>
上面代码,通过在子组件上面绑定动态参数:form=’userinfo’将父组件中的参数传递给子组件,子组件就可以通过props来进行接收。
子组件接收参数代码如下:
...
export default {
props: {
// 接收
form: { userinfo: Object }
}
},
}// 另一种写法
export default {
props: {
// 接收
form: ['userinfo'] }
},
}
上面代码中,还可以使用数组来接受参数,但是不能指定参数的类型。
子组件向父组件传值
方法:子组件通过vue实例方法$emit进行触发并且可以携带参数,父组件监听使用@(v-on)进行监听,然后进行方法处理。
子组件向上传值
<template>
<ul class="letter_city">
<li @click="selectItem('子组件向父组件传值')">
</li>
</ul>
</template>
<script>
export default {
methods: {
selectItem(value) {
this.$emit('selectItems', value)
}
}
}
</script>
上面代码中,this指代的是vue实例,子组件通过$emit向父组件触发事件和传递参数。
父组件监听子组件传来的值
<template>
<city-pages @selectItem='selectItem'></city-pages>
</template>
<script>
import cityPages from './cityPages'
export default {
components: {
cityPages
},
methods: {
selectItem(value) {
console.log(value) // 子组件向父组件传值
}
}
}
</script>
上面代码中,在子组件中监听方法,如果子组件触发方法,父子间这边就可以得到子组件传过来的参数了。










