Vue:ref和this.$refs的使用

官方文档的定义:

ref 被用来给DOM元素或子组件注册引用信息。引用信息会根据父组件的 $refs 对象进行注册。如果在普通的DOM元素上使用,引用信息就是元素; 如果用在子组件上,引用信息就是组件实例。

昨天遇到这样一个问题,产品要在页面上做一个上传excel的功能(虽然我也不知道为什么要这么设计),上传组件是另一个项目组写的JobUI,他们做了一个小叉按钮来删除附件,但是没有做监听,我试了下在上传的方法里可以清除附件upfile对象,却无法改变显示。
在这里插入图片描述
于是我查了下他们的源代码。

<div class='file_list' :class="error" :title="title" v-if="!filelist && filename && singleClose">
			<i class=' ' :class="fileIcon"></i>
			<span :title='filename'>{{filename}}</span>
            <i class='iconfont iconcancel' @click='closesingle()'></i>
</div>
      closesingle(){
          this.singleClose = false
          this.$emit('input',{})
          this.$emit('deletefile',this.filename)
      },

这个closesingle()应该就是删除方法,第一行是上传开关,第二行是清空显示,第三行是删除对象。
现在解决方案出来了,先用ref=“upload” 为upload组件赋予一个引用,注册到this.$ref中。

<div class="upload">
    <upload :uptype='uploadTypeList' v-model='upfile' ref="upload"> 上传学员证书</upload>
</div>

然后在上传方法里调用。

	   //清空选择文件
	   this.$refs.upload.closesingle();

这样就实现了小叉按钮的删除功能。

Vue 3 中,`this.$refs` 是一个特殊的属性,它提供了一种直接访问组件实例中 DOM 元素的方式。当在模板中使用 `ref` 属性绑定一个元素时,Vue 会将这个引用存储在 `$refs` 对象中,让你可以在任何时候通过组件实例访问到那个元素。 以下是如何在 Vue 3 中使用 `this.$refs` 的基本步骤: 1. **定义 ref**: 在你的模板(`.vue` 文件的 template 部分)中,为需要引用的元素添加 `ref` 属性,例如 `<div ref="myRef"></div>`。 2. **获取引用**: 在组件的 `setup` 函数或 methods 中,你可以通过 `this.$refs` 访问到这个元素。例如: ```javascript export default { setup() { const myRef = ref(null); // 创建一个响应式的 ref 变量来保存引用 onMounted(() => { // 当组件已挂载,你可以获取到 DOM 元素 const domElement = this.$refs.myRef; if (domElement) { console.log('DOM element:', domElement); } }); // 或者在事件处理器中使用 function handleClick() { if (myRef.value) { myRef.value.style.backgroundColor = 'red'; } } return { handleClick, myRef }; } } ``` 3. **使用**: 在事件处理函数或生命周期钩子(如 `onMounted`、`onUpdated` 等)中,你可以直接操作 `this.$refs.myRef` 的属性或方法。 **相关问题--:** 1. Vue 3 中的 `ref` 是什么时候初始化的? 2. 如何在 Vue 3 的自定义事件中使用 `$refs`? 3. `$refs` 是否仅在组件挂载后可用?如果组件被卸载,还能保持引用吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值