【VUE入门级&温故知新】一文向您详细介绍~模板引用ref(选项式API)

大家好,我是DX3906

🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘大前端领域、真诚分享知识与智慧的小天地!🎇

前面和大家分享了《如何从零开始创建一个 Vue 应用》

                             《VUE模板语法(超详细讲解)》

                             《一文向您详细介绍~Vue响应式基础(选项式API)》

                             《一文向您详细介绍~Vue计算属性computed(选项式API)》

                             《一文向您详细介绍~Class类 与 Style样式 绑定(选项式API)》

                             《一文向您详细介绍~条件渲染(选项式API)》

                             《一文向您详细介绍~列表渲染(选项式API)》

                             《一文向您详细介绍~事件处理v-on(选项式API)》

今天和大家共同学习一下Vue基于组合式API的模板引用ref

 

使用场景

虽然 Vue 的声明性渲染模型为你抽象了大部分对 DOM 的直接操作,但在某些情况下,我们仍然需要直接访问底层 DOM 元素。要实现这一点,我们可以使用特殊的 ref attribute: 

<input ref="input">

ref 是一个特殊的 attribute,和 v-for 章节中提到的 key 类似。它允许我们在一个特定的 DOM 元素或子组件实例被挂载后,获得对它的直接引用。这可能很有用,比如说在组件挂载时将焦点设置到一个 input 元素上,或在一个元素上初始化一个第三方库。

访问模板引用

挂载结束后引用都会被暴露在 this.$refs 之上:

<script>
export default {
  mounted() {
    this.$refs.input.focus()
  }
}
</script>

<template>
  <input ref="input" />
</template>

注意,你只可以在组件挂载后才能访问模板引用。如果你想在模板中的表达式上访问 $refs.input,在初次渲染时会是 undefined。这是因为在初次渲染前这个元素还不存在呢!

函数模板引用

除了使用字符串值作名字,ref attribute 还可以绑定为一个函数,会在每次组件更新时都被调用。该函数会收到元素引用作为其第一个参数:

<input :ref="(el) => { /* 将 el 赋值给一个数据属性或 ref 变量 */ }">

注意我们这里需要使用动态的 :ref 绑定才能够传入一个函数。当绑定的元素被卸载时,函数也会被调用一次,此时的 el 参数会是 null。你当然也可以绑定一个组件方法而不是内联函数。

组件上的 ref

模板引用也可以被用在一个子组件上。这种情况下引用中获得的值是组件实例:

<script>
import Child from './Child.vue'

export default {
  components: {
    Child
  },
  mounted() {
    // this.$refs.child 是 <Child /> 组件的实例
  }
}
</script>

<template>
  <Child ref="child" />
</template>

如果一个子组件使用的是选项式 API ,被引用的组件实例和该子组件的 this 完全一致,这意味着父组件对子组件的每一个属性和方法都有完全的访问权。这使得在父组件和子组件之间创建紧密耦合的实现细节变得很容易,当然也因此,应该只在绝对需要时才使用组件引用。大多数情况下,你应该首先使用标准的 props 和 emit 接口来实现父子组件交互。

expose 选项可以用于限制对子组件实例的访问:

export default {
  expose: ['publicData', 'publicMethod'],
  data() {
    return {
      publicData: 'foo',
      privateData: 'bar'
    }
  },
  methods: {
    publicMethod() {
      /* ... */
    },
    privateMethod() {
      /* ... */
    }
  }
}

在上面这个例子中,父组件通过模板引用访问到子组件实例后,仅能访问 publicData 和 publicMethod

结语

🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~ 

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Vue.js中的选项API和组合API都是用来定义组件的方,但它们之间有着很大的区别。 选项APIVue.js早期版本中使用的一种定义组件的方。在选项API中,组件定义以一个JavaScript对象的形呈现,包括data、methods、computed、watch等属性和方法。这种方比较简单易懂,适合较小的组件,但是在组件逻辑较为复杂时,选项API的代码会变得冗长难以维护。 组合APIVue.js 3.0版本中引入的一种全新的组件定义方。该API组件的逻辑拆分成逻辑组合的小函数,使得组件逻辑更加清晰、易于维护。组合API主要包括setup函数、响应API、生命周期钩子函数等。 setup函数是组合API的核心,它是一个在组件创建之前被调用的函数。setup函数可以返回一个对象,该对象中包含了组件的data、methods、computed、watch等属性和方法。与选项API不同的是,setup函数中不存在this上下文,而是通过传入的参数来访问组件实例。 响应API是组合API的另一个重要特性,它可以让组件中的数据具有响应的特性。使用响应API创建的数据可以自动更新视图,而不需要手动调用更新函数。 生命周期钩子函数在组合API中的使用方选项API相似,不同的是,生命周期钩子函数中的this上下文不再指向组件实例,而是需要通过传入的参数来访问组件实例。 综上所述,选项API和组合API都是Vue.js中定义组件的方,但是它们之间有着很大的区别。选项API适用于简单的组件,而组合API则适用于复杂的组件,它可以更好地拆分组件的逻辑,使得代码更加清晰、易于维护。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻找DX3906

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值