美文网首页
[vue3新特性] 8.组合api——9.获取dom元素和组件实

[vue3新特性] 8.组合api——9.获取dom元素和组件实

作者: 林哥学前端 | 来源:发表于2021-10-22 19:18 被阅读0次

    我们在之前学习过获取dom元素和组件实例使用的this.$refs,但是现在使用setup函数中没有this指针,我们也不能使用$refs了,
    在组合API中,使用ref函数来获取dom元素和组件实例

    1.获取dom元素

    在一个原生标签上加上一个ref属性,

    <div ref="dom">dom元素</div>
    

    我们之前说过,这个ref就相当于一个id,
    然后在setup中声明一个数据,它的变量名称要和ref一致,要在setup中return这个数据

      setup() {
        const dom = ref(null)
        onMounted(() => {
          console.log(dom.value)
        })
        return {
          dom,
        }
      },
    

    因为setup函数调用的时机比较早,dom元素还有没有渲染到页面上,所以在onMounted回调函数中,我们才能获取dom元素,以上的代码会把dom元素打印出来



    有几点需要注意
    1.标签中ref的值要和变量名一直
    2.使用ref函数声明数据时,参数是null

    const dom = ref(null)
    

    3.要在setup中return这个数据
    4.要在onMounted以后才能获取到dom元素

    2.获取组件实例

    用同样的方式我们也可以获取到组件实例,我们来实现一个获取组件实例,并且调用组件方法的功能,
    在之前的学习中,我们拿到组件实例以后,就可以直接调用组件methods里的方法,
    现在在组合API中,没有methods,所以这种方式是不行的,
    要用到setup的第二个参数context的一个方法,expose,就是暴露的意思,向父级组件暴露自己方法或者数据
    我们先修改titleBar这个组件,增加一个hide方法,然后通过context.expose暴露出来

      setup(props, context) {
        const hide = () => {       // 定义hide方法
          console.log('隐藏方法被调用了')
        }
        context.expose({          //通过expose暴露出去
          hide,
        })
      },
    

    然后在App.vue中,使用ref获取到titleBar的组件实例,在onMounted方法中调用hide

    <titleBar title="页面标题" ref="myTitleBar"></titleBar>
    
      setup() {
        const myTitleBar = ref(null)    // 1.定义ref数据
        onMounted(() => {
          myTitleBar.value.hide()       // 3.在onMounted中调用组件的方法
        })
        return {
          myTitleBar,                   // 2.返回ref数据
        }
      },
    

    我们可以看到控制台打印了

    隐藏方法被调用了

    说明子组件的方法被正确调用了

    这节课我们学习了使用ref获取dom元素和组件实例,并且使用context的expose方法向父级组件暴露方法。
    大家一定要自己动手写一写,才能真正掌握。

    相关文章

      网友评论

          本文标题:[vue3新特性] 8.组合api——9.获取dom元素和组件实

          本文链接:https://www.haomeiwen.com/subject/ktchaltx.html