vue父子组件通信
一、父组件向子组件传参 (非vue3语法糖)
父组件-传递参数:
<template> <div>
<p class="father">父组件</p>
<child :roomid="id"></child>
</div>
</template>
<script>
import child from './child'
export default {
components: {
child
},
data() {
return {
id:'1234' // 父组件向子组件传的值
}
}
}
</script>
子组件-接收参数
<script> export default { props: { roomid: String }, //父组件传入参数 data() { return { rtmindexconfig: "", seen: false, controlinfo: { dynamicHtml: "", } }; }, setup(props) { //可以取出传入的参数 console.error("props", props); }, mounted() { this.k_room_camera(); }, methods: { k_room_camera() { //方法中使用this.xxx就可取出父组件传入的参数 console.error(this.roomid); } } }; </script>
说明:
①roomid是在子组件中绑定要传的值,记住“=”前的roomid要和子组件中要接受的变量名要一致。
②在子组件中用props来接受传入的值,可以写成对象类型,规定类型和默认值,也可以直接写成字符串。
③在子组件中可以直接使用,也可以在函数中使用this.roomid进行访问。
二、子组件调用父组件方法并传参 (非vue3语法糖)
父组件-方法接收:
<template>
<div>
<p class="father">父组件</p>
<WebCam @getcamInfo="getcamInfo"></WebCam>
</div>
</template>
<script>
import WebCam from "./WebCam.vue";
export default {
components: {
child
},
data() {
return {
childSid:'' // 接收子组件的值
}
},
methods: {
getcamInfo(val) {
this.childSid=val;
console.error(val);
}
}
}
</script>
子组件-调用并传参:
<template>
<div>
<p class="child">子组件</p>
<button @click="valueClick">传值</button>
</div>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
valueClick() {
this.$emit("getcamInfo","参数值");
}
}
}
</script>
二、子组件调用父组件方法并传参 (vue3语法糖)
父组件-方法接收值
<template>
<div>
<p class="father">父组件</p>
<WebCam @getcamInfo="getcamInfos"></WebCam>
</div>
</template>
<script setup>
import WebCam from "./WebCam.vue";
getcamInfos(val) {
console.error(val);
}
</script>
子组件-调用并传参
<template>
<div>
<p class="child">子组件</p>
<button @click="valueClick">传值</button>
</div>
</template>
<script setup>
const emits = defineEmits("getcamInfo"); //调用父组件方法名
function valueClick() {
emits("getcamInfo","参数值");
}
</script>
二、父组件给子组件传参 (vue3语法糖)
父组件:
<template>
<div>
<p class="child">父组件</p>
<TimeTable :configinfo="t_tableconfig" />
<button @click="valueClick">传值</button>
</div>
</template>
<script setup>
import TimeTable from "@/components/Dialog/TimeTable.vue";
import { ref } from "vue";
const t_tableconfig = ref({});
function valueClick(){
//向子组件传参
t_tableconfig.value = { roomid: “值”, config: “值” };
}
</script>
子组件
<template>
<div>
<p class="child">子组件</p>
<button @click="valueClick">传值</button>
</div>
</template>
<script setup>
import TimeTable from "@/components/Dialog/TimeTable.vue";
import { ref,watch } from "vue";
//接参
const props = defineProps({
configinfo: {
type: Object,
default: () => {}
}
});
init();
function init() {
//取出来父组件传的参数
console.error(props);
console.error(props.configinfo.config);
}
//可以监听,值变化时的操作
watch(
() => props.configinfo.roomid,
(newValue, oldValue) => {
init();
}
);
</script>
二、父组件调用子组件方法(vue3语法糖)
父组件
<template>
<div>
<p class="child">父组件</p>
<TimeTable ref="selectroomclick" />//ref是要触发子组件方法
<button @click="valueClick">传值</button>
</div>
</template>
<script setup>
import TimeTable from "@/components/Dialog/TimeTable.vue";
import { ref } from "vue";
const selectroomclick = ref(null);
function valueClick(){
//调子组件方法 ustsr_click_select为调取的方法名
selectroomclick.value.ustsr_click_select();
}
</script>
子组件
<template>
<div>
<button>我是子组件按钮</button>
</div>
</template>
<script setup lang="ts">
//会被父组件调用
const ustsr_click_select = () => {
console.log("@子组件----我被调用了");
};
defineExpose({
ustsr_click_select,
});
</script>
<style scoped></style>
本文来自博客园,作者:じ逐梦,转载请注明原文链接:https://www.cnblogs.com/ZhuMeng-Chao/p/18230350

浙公网安备 33010602011771号