每日鸡汤:所有真实的快乐,都来自很久的努力
目录
本篇文章对应官网【模版引用】
可以为模版引用标注类型,把ref="x" 设置在某一个html原生的dom上
有两种方法给ref变量标注类型,第一种是后面加上冒号
- import { Ref, ref } from 'vue'
- // 注意左边用的是大写的Ref
- const isCheck: Ref
= ref(false)
还有一种是写在等号右边,类似ts范型的写法
const isCheck = ref(false)
同理模版引用,用哪种方法写都可以
- const el = ref<HTMLElement | null>(null)
- const el: Ref<HTMLElement | null> = ref(null)
同样也可以应用在组件上,一般用在子组件调用父组件的方法,或者父组件调用子组件的方法。
这个时候就需要用到defineExpose这个方法了,使用 的组件是默认关闭的不暴露的方法是无法互相引用的。
此时,子组件使用defineExpose暴露open方法,父组件modal.value.open调用,正如官网的例子
想着是可以用$parent,但是$parent之类的,$开头的变量和方法只能在模版中、选项式组件(即this)上使用,在setup标签中用不了的。所以我们可以用另一种父子传递消息的方法provide、inject
- <template>
-
- <button>我是按钮button>
- template>
- <script lang="ts" setup>
- import { inject, onMounted } from 'vue';
- // 子组件中获取
- const open = inject('parent-open') as () => void;
- onMounted(() => {
- open();
- });
- script>
- <style lang="scss">style>
- <template>
-
- <o-button>o-button>
- template>
- <script lang="ts" setup>
- import { provide } from 'vue';
- import OButton from './component/OButton.vue';
- const open = () => {
- console.log('open in parent');
- };
-
- // 父组件使用provode,定义一个名称,这个名称随意
- provide('parent-open', open);
- script>
v-for
中的模板引用v-for对应的值是一个数组,谨记
需要着重掌握,父组件和子组件互相调用函数的语法。
ref 和 provide + inject的用法