1 父向子 props (defibeProps) , 子向父自定义事件(defineEmits)
2 时间总线(mitt插件)
3 v-model (可以绑定多个v-model)
a 给子组件传递props[modelValue]
b 给子组件传递自定义事件 @update:modelValue
列子: <Child v-model:name="name" v-model:sex="sex>
4 useAttrs(引入useAttrs方法,可以获取组件的属性和自定义事件,可以在子组件拿到父组件传递过来的值)
- useAttrs()会返回一个对象,需要import {useAttrs} form "vue
2 但是使用defineProps,useAttrs不生效,defineProps优先级高
5 ref(可以获取真是DOM, 也可以获取子组件实例的VC) $parent(可以子组件获取父组件实例)
重点: 结合 defineExpose使用,组件内部数据不能被外部使用,需要 defineExpose暴露出去
a. ref 在父组件获取子组件实例通过 const son = ref(), 然后子组件defineExpose暴露给父组件使用的方法
b $parent 父组件defineExpose暴露给子组件使用的方法, 子组件通过事件拿到$parnet参数 @click = handle($parnet )
6 provide 提供 inject 注入(隔辈子传值)
a provide提供数据,接受俩个参数,第一个为key; 第二个为传递的值 provide(‘token’, 123123)
b inject 接受数据 会根据key let val = inject('token')
c 可以在孙子组件修改传递的值,父组件也会更新
7 pinia(打菠萝) 有 state action getter核心 无module mutation
a createPainia() 创建大仓库,然后再main.ts 引入
b (选择式API)defineStoe 定义小仓库,俩个参数,仓库名字 和配置对象
let store = defineStore('user', {
state: () => { return { count: '12313'}},
action: () => {
update () {
// 注意为context上下问啦,所一需要this
this.count ++
}
},
getter: () => {}
})
c (组合式API)defineStoe 定义小仓库,俩个参数,仓库名字 和配置对象
let store = defineStore('user', () => {
let count = ref(666)
update () {count ++ }
注意: getter 用computed 代替
return {
count ,update
}
})
8 插槽(作用域插槽)
子组件可以将数据传递回给父子间,然后父子通过回传数据来写子组件何种结构进行展示