组件
你可以使用Vue2
的属性写法,详细内容见【Vue2】组件
使用组件
父组件这样写:
<template>
<childPart />
</template>
<script setup>
import childPart from './components/childPartView.vue';
// 其它内容
</script>
父组件向子组件传递函数/变量
注意,子组件获取到的父组件参数是不能在子组件中修改的
父组件这样写:
<template>
<childPart :val="val" :handleClick="handleClick" />
</template>
<script setup>
import {ref} from "vue";
import childPart from './components/childPartView.vue';
var val=ref("Hello world!");
const handleClick=()=>{
console.log("Hello world!");
}
</script>
子组件这样写
<template>
<div>{{ props.val }}</div>
</template>
<script setup>
const props = defineProps(["val", "handleClick"])
</script>
父组件调用子组件函数/变量
注意,父组件获取到的子组件变量是可以在父组件中修改的
父组件这样写:
<template>
<childPart ref="childRef" />
<button @click="callChild"></button>
</template>
<script setup>
import {ref} from "vue";
// 注意变量名和子组件的ref名称相同
const childRef=ref(null);
function callChild(){
childRef.value.testFun("hello world!");
consle.log(childRef.value.childVal)
}
</script>
子组件这样写:
<template>
</template>
<script setup>
//可以暴露函数或者变量
function testFun(val){
console.log(val);
}
const childVal="Hello world!";
// 注意要设置为暴露
defineExpose({
testFun,
childVal
})
</script>
子组件调用父组件函数
父组件这样写:
<template>
<childPart @testFun="testFun" />
</template>
<script setup>
function testFun(val){
// ...
}
</script>
子组件这样写
<template>
<button @click="testFun">测试按钮</button>
</template>
<script setup>
// 注意定义需要emit的函数
const emit = defineEmits([ "testFun" ]);
function testFun(){
emit("testFun", "hello"); // emit(函数, 参数)
}
</script>
全局变量跨层传递
在定义组件中
<script setup>
import { provide } from 'vue'
provide(/* 注入名 */ 'message', /* 值 */ 'hello!')
</script>
在获取组件中
<script setup>
import { inject } from 'vue'
const message = inject('message')
</script>