QQ咨询 官方微信

添加微信好友

官方小程序

百度小程序

微信小程序

头条小程序

关于我们

uniapp

uniapp中的ref使用

 admin  2022-07-03 11:20:20
被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的 $refs 对象上。
如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例:
  1. <!-- 非H5端不支持通过this.$refs.content来获取view实例 --> 
  2. <view ref="content">hello</view> 
  3.  
  4. <!-- 支持通过this.$refs.child来获取child-component实例 --> 
  5. <child-component ref="child"></child-component> 
当 ref 和 v-for 一起用于元素或组件的时候,引用信息将是包含 DOM 节点或组件实例的数组。

关于 ref 注册时间的重要说明:

因为 ref 本身是作为渲染结果被创建的,在初始渲染的时候你不能访问它们,它们还不存在!$refs 也不是响应式的,因此你不应该用它在模板中做数据绑定。

#子组件ref
尽管存在 prop 和事件,有的时候你仍可能需要在 JavaScript 里直接访问一个子组件。 访问子组件实例或子元素,通过 ref 为子组件赋予一个 ID 引用,在vue的js中可通过this.$refs.XXX来获取到组件对象。

<base-input ref="usernameInput"></base-input>
你已经定义了这个 ref 的组件里,你可以使用:this.$refs.usernameInput来访问这个<base-input>实例。
  1. #示例: 
  2. <!-- base-input子组件页面 --> 
  3. <template> 
  4. <view> 
  5.   <input :focus="isFocus" type="text" placeholder="请输入内容" /> 
  6. </view> 
  7. </template> 
  8. <script> 
  9. export default { 
  10.   name:"base-input"
  11.   data() { 
  12.    return { 
  13.     "isFocus":false 
  14.    }; 
  15.   }, 
  16.   methods:{ 
  17.    focus(){ 
  18.     this.isFocus = true 
  19.    } 
  20.   } 
  21. </script> 
允许父级组件通过下面的代码聚焦<base-input> 里的输入框:

  1. <!-- index 父组件页面 --> 
  2. <template> 
  3. <view> 
  4.   <base-input ref="usernameInput"></base-input> 
  5.   <button type="default" @click="getFocus">获取焦点</button> 
  6. </view> 
  7. </template> 
  8. <script> 
  9. export default { 
  10.   methods:{ 
  11.    getFocus(){ 
  12.     //通过组件定义的ref调用focus方法 
  13.     this.$refs.usernameInput.focus() 
  14.    } 
  15.   } 
  16. </script> 


应注意的坑:

1、如果通过v-for 遍历想加不同的ref时记得加 :号,即 :ref =某变量 ;
这点和其他属性一样,如果是固定值就不需要加 :号,如果是变量记得加 :号。(加冒号的,说明后面的是一个变量或者表达式;没加冒号的后面就是对应的字符串常量(String))

2、通过 :ref =某变量 添加ref(即加了:号) ,如果想获取该ref时需要加 [0],如this.$refs[refsArrayItem] [0];如果不是:ref =某变量的方式而是 ref =某字符串时则不需要加,如this.$refs[refsArrayItem]。


1、ref 需要在dom渲染完成后才会有,在使用的时候确保dom已经渲染完成。比如在生命周期 mounted(){} 钩子中调用,或者在 this.$nextTick(()=>{}) 中调用。

2、如果ref 是循环出来的,有多个重名,那么ref的值会是一个数组 ,此时要拿到单个的ref 只需要循环就可以了。


$refs的用法及作用
获取DOM元素,一般用document.querySelector获取这个dom节点,然后在获取input的值
但是用ref绑定之后,就不需要在获取dom节点了,直接在上面的input上绑定input1,然后$refs里面调用即可
this.$refs.input1  这样可以减少获取DOM节点的消耗
  1. <div id="app"
  2.     <input type="text" ref="input1"/> 
  3.     <button @click="add">添加</button> 
  4. </div> 
  1. new Vue({ 
  2.     el: "#app"
  3.     methods:{ 
  4.     add:function(){ 
  5.          //this.$refs.input1  减少获取dom节点的消耗 
  6.         this.$refs.input1.value ="996"
  7.         } 
  8.     } 
  9. }) 


¥ 打赏
×
如果您觉得文章帮助了您就打赏一下吧
非常感谢你的打赏,我们将继续分享更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

本文《uniapp中的ref使用》发布于石头博客文章,作者:admin,如若转载,请注明出处:https://www.pweb123.com/frame/uniapp/878.html,否则禁止转载,谢谢配合!
上一篇:第一页

文章点评

我来说两句 已有0条评论
点击图片更换

添加微信好友

添加微信好友

微信小程序

百度小程序