vue中ref和$refs用法详解

一、基本概念

Vue中的ref用来给元素或子组件注册引用信息,而$refs可以用来获取ref注册过的元素或组件,并调用其方法。

二、基本用法

用法: 子组件上定义ref=“refName”, 父组件的方法中用 this.$refs.refName.method 去调用子组件方法

三、几种情况

  1. 当ref用在组件上时,用$refs获取到的的是组件实例。
<template>
 <div id="app">
   <Home ref="test" />
 </div>
</template>

<script>
import Home from './views/Home'
export default {
 components: { Home },
 mounted () {
   console.log(this.$refs.test)
 }
}
</script>
  1. 当ref用在dom元素上时,用$refs获取到的的是当前元素。
<template>
  <div id="app">
    <p ref="test">
      <span>123</span>
    </p>
  </div>
</template>

<script>
export default {
  mounted () {
    console.log(this.$refs.test)
  }
}
</script>
  1. 多处ref引用的值相同时(非v-for内使用时):当html中ref值相同的节点是兄弟节点时,通过$refs获取到的是文档中顺序靠下的节点
<template>
  <div id="app">
    <p ref="test">
      <span>123</span>
    </p>
    <span ref="test">456</span>
  </div>
</template>

<script>
export default {
  mounted () {
    console.log(this.$refs.test)
  }
}
</script>
  1. 当ref用在循环中时:
    ref值相同时,this.$refs.refName获取到的是该DOM节点或组件的数组,此处以组件为例
<template>
  <div id="app">
    <Home v-for="num in loop" :key="num" ref="test"></Home>
  </div>
</template>

<script>
import Home from './views/Home'
export default {
  components: { Home },
  data () {
    return {
      loop: 3
    }
  },
  mounted () {
    console.log(this.$refs.test)
  }
}
</script>

当ref值不同时,this.$refs[ref名称]无法获取对应的DOM节点或是组件,需要在其后追加[0]才可访问,此处以组件为例

<template>
  <div id="app">
    <Home v-for="num in loop" :key="num" :ref="'test' + num"></Home>
  </div>
</template>

<script>
import Home from './views/Home'
export default {
  components: { Home },
  data () {
    return {
      loop: 3
    }
  },
  mounted () {
    console.log(this.$refs.test1)
  }
}
</script>

总结

  1. 如果ref用在普通的DOM元素上,$ refs引用指向的就是DOM元素,如果用在子组件上,$refs引用就指向子组件实例。
  2. 当v-for用于元素或组件时,引用信息将会是包含DOM节点或组件实例的数组。
  3. 注意关于ref注册时间的重要性:因为ref本身是作为渲染结果被创建的,在初始渲染的时候不能访问他们,还不存在,$refs也不是响应式的,不应该试图用它在模板中做数据绑定。
  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值