vue组件间通信方式
一、父子组件通信
<template>
// 父组件
<div>
// 子组件
<children @search="search" :message.sync="message"></children>
</div>
</template>
<script>
import children from "path";
export default {
data() {
return {
message: "hello children component"
}
},
methods: {
search(e) {
// 方法体
console.log(e); // this event from children
}
}
}
</script>
<template>
// 子组件
<div>
<text>{{ message }}</text>
<button @click.stop="search">搜索</button>
</div>
</template>
<script>
export default {
props: {
message: {
type: String,
default: ""
}
},
data() {
return {
info: "this event from children"
}
},
methods: {
search() {
// 向父组件通信
this.$emit("search",this.info);
// 修改父组件传过来的参数
this.$emit("update:message","change from children");
}
}
}
</script>
一般来说,父组件向子组件传参,子组件不能直接修改此参数,若要修改此参数,在父组件传参时需要在参数名后加.sync修饰符,然后在子组件的方法中用this.$emit("update:参数名","目标修改内容")来修改此参数。
如果父组件要使用子组件的方法,可以使用一下方式
<template>
// 子组件
<div>
<text>{{ message }}</text>
</div>
</template>
<script>
export default {
data() {
return {
message: '我是子组件',
info: "this event from children"
}
},
methods: {
search() {
// 这是子组件的方法
console.log(this.info, '这是子组件中的info信息');
}
}
}
</script>
<template>
// 父组件
<div>
<button @click="getChildren" />
<Children ref="children" />
</div>
</template>
<script>
import Children from './common/Children';
export default {
components: { Children },
data() {
return {
}
},
methods: {
getChildren() {
// 这是子组件的方法
this.refs.children.search();
// this event from children, 这是子组件中的info信息
}
}
}
</script>

浙公网安备 33010602011771号