【vue2第十二章】ref和$refs获取dom元素 和 vue异步更新与$nextTick使用

这篇具有很好参考价值的文章主要介绍了【vue2第十二章】ref和$refs获取dom元素 和 vue异步更新与$nextTick使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ref和$refs获取dom元素

为什么会有 ref 和 $refs?

因为在vue页面中使用dom查找元素,不管你是不是在子组件里面查找,查找的都是整个页面的元素,如果你想查找单独组件里面的元素是不容易实现的,除非把每个组件的class写成独一无二,但是在日常开发中,一个vue页面不知道会有多少组件,所以出现了relrefs.

ref 和 $refs 作用
【vue2第十二章】ref和$refs获取dom元素 和 vue异步更新与$nextTick使用,vue,vue.js,javascript,前端,html,开发语言,前端框架

ref 和 $refs 使用

通过在要获取的元素上面店家rel属性 rel="名称"
然后在要获取此元素的js代码上通过 this.$rels.名称 就可以获取。

如此获取的就是当前组件内部的标签了,

<template>
  <div>
    <!-- 为input框添加rel属性 -->
    <input  type="text" :value="msg" ref="inp"
        @input="fun($event.target.value)">
    <button @click="showInput">显示</button>
  </div>
</template>
<script>
export default {
    props:{
        msg:String
    },
    mounted(){
    },
    methods:{
        fun(e){
            this.$emit('update:msg',e)
        },
        showInput(){
            //通过this.$rels.inp获得标签
            console.log(this.$refs.inp)
            console.log(this.$refs.inp.value)
        }
    }
}
</script>

也是成功的获取到了并且打印出来:
【vue2第十二章】ref和$refs获取dom元素 和 vue异步更新与$nextTick使用,vue,vue.js,javascript,前端,html,开发语言,前端框架

vue异步更新和$nextTick使用

什么是vue的异步更新?
Vue的异步更新是指在Vue的响应式系统中,更新组件的方式是异步的。这意味着当数据发生变化时,Vue并不立即更新组件的DOM,而是等到同一事件循环中的所有数据变化完成后,再统一进行一次更新操作。

vue的异步更新好处
Vue之所以采用异步更新的机制,是为了优化性能和避免不必要的重复渲染。当数据发生变化时,Vue会将变化加入到一个队列中,然后通过异步的方式批量处理这些变化。这样可以避免频繁的DOM操作,提高性能。

异步更新还带来一个重要的好处,即在同一个事件循环中,多处对同一数据进行修改时,只会触发一次更新操作。这样可以减少重复的计算和渲染,提升性能。

总结来说,Vue的异步更新可以提高性能和优化渲染,使得组件更新更加高效和灵活。

案列:
我需要点击编辑按钮 然后显示input框 并且聚焦到input框上。
【vue2第十二章】ref和$refs获取dom元素 和 vue异步更新与$nextTick使用,vue,vue.js,javascript,前端,html,开发语言,前端框架
我的代码是这样的:

<template>
  <div>
    <!-- 为input框添加rel属性,使用v-if来显示隐藏input框 -->
    <input  type="text" :value="msg" v-if="isShow" ref="inp">
    <!-- 添加方法 -->
    <button  @click="showInput">编辑</button>
  </div>
</template>

<script>
export default {
    data(){
        return{
            isShow:false
        }
    },
    props:{
        msg:String
    },
    mounted(){
    },
    methods:{
        showInput(){
            //显示input框
            this.isShow = true
            //通过this.$rels.inp获得标签
            console.log(this.$refs.inp)
            console.log(this.$refs.inp.value)
            //为input框聚焦
            this.$refs.inp.focus()
        }
    }
}
</script>

然后我点击编辑按钮出现了下面的错误,说我的this.$refs.inp是 undefined。
【vue2第十二章】ref和$refs获取dom元素 和 vue异步更新与$nextTick使用,vue,vue.js,javascript,前端,html,开发语言,前端框架
为什么 “显示之后“ 立刻获取焦点没有成功呢?
就是vue采用的是异步更新的机制,当 //显示input框 this.isShow = true时并没有马上去更新页面的dom,而是等待这个方法执行完成再去进行更新页面,所以导致获取的this.$refs.inp是 undefined。所以问题就是在我在它没有更新dom的时候就去获取dom,所以是undefined.

如何解决?(使用$nextTick

<template>
  <div>
    <input  type="text" :value="msg" v-if="isShow" ref="inp">
    <button  @click="showInput">编辑</button>
  </div>
</template>

<script>
export default {
    data(){
        return{
            isShow:false
        }
    },
    props:{
        msg:String
    },
    mounted(){
    },
    methods:{
        showInput(){
            this.isShow = true
            //通过this.$rels.inp获得标签
            //将需要使用未更新的dom元素使用this.$nextTick()封装为箭头函数包裹起来
            this.$nextTick(()=>{
                this.$refs.inp.focus()
                console.log(this.$refs.inp)
                console.log(this.$refs.inp.value)
            })
        }
    }
}
</script>

最后成功聚焦,并且控制台输出了当前获取标签:
【vue2第十二章】ref和$refs获取dom元素 和 vue异步更新与$nextTick使用,vue,vue.js,javascript,前端,html,开发语言,前端框架文章来源地址https://www.toymoban.com/news/detail-704052.html

到了这里,关于【vue2第十二章】ref和$refs获取dom元素 和 vue异步更新与$nextTick使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第十二节——ref

    ref 被用来给DOM元素或子组件注册引用信息。引用信息会根据父组件的 $refs 对象进行注册。如果在普通的DOM元素上使用,引用信息就是元素; 如果用在子组件上,引用信息就是组件实例。 注意:只要想要在Vue中直接操作DOM元素,就必须用ref属性进行注册 ref 加在普通的元素上,

    2024年02月07日
    浏览(27)
  • vue3 ts获取组件 ref元素的值

    在 Vue 3 + TypeScript 中,要获取组件 ref 元素的值,可以通过 ref 函数创建一个 ref,并将其绑定到组件的 ref 属性上。然后,可以通过访问 ref 的 .value 属性来获取该组件的实例。 以下是一个示例代码: 在上述代码中,我们首先使用 ref 函数创建了一个名为 childComponentRef 的 ref,并

    2024年02月05日
    浏览(36)
  • 29 - ref 和 $refs 获取dom和组件

    作用: 利用 ref  和 $refs 可以用于 获取 dom 元素 , 或 组件实例 特点: 查找范围 - 当前组件内(更精确稳定) 1. 获取 dom:         (1). 目标标签 - 添加 ref属性         (2). 恰当时机,通过this.$refs.xxx,获取目标标签         代码示例:   2. 获取组件         (1). 目标组件 - 添加 r

    2024年02月11日
    浏览(28)
  • 【Vue3】vue3通过ref获取元素离顶部的距离

    vue3版本 ^3.2.45 [ref].value.$el.getBoundingClientRect().top 通过ref获取元素。 使用 getBoundingClientRect().top 获取离顶部的距离 homeView.vue

    2024年02月15日
    浏览(37)
  • React 中的 ref 如何操作 dom节点,使输入框获取焦点

    .focus() 获取焦点 当用户点击按钮时, handleClick 函数会被调用,从而将焦点聚焦到文本输入框上。 定义一个名为 handleClick 的函数。当按钮被点击时,这个函数会被调用。在函数内部,我们通过 inputRef.current 获取到 inputRef 引用所指向的 DOM 元素,并调用其 focus 方法,将焦点聚

    2024年02月09日
    浏览(30)
  • el-table里面存在固定列获取video的ref的时候无法获取原始DOM

    这是通过ref获取的dom实例,却变成了fixed固定出现了表格里面的video的实例 我现在的需求是修改里面的currentTime,但是获取的是固定列的video的ref,修改了,原始video也不会有任何变化 创造一个变量控制fixed的固定列变化 当video里面的 @loadedmetadata=\\\"setInitialTime\\\"修改完数据,再变

    2024年01月19日
    浏览(28)
  • uniapp中开发小程序使用ref获取dom实例,一直显示undefined,竟然发现是这个原因!

    小程序是不能使用getElementById之类的dom api,所以考虑使用ref来获取dom元素,但事实上并不是如此,绑定ref后并没有输出我想要的dom元素。 既然console.log(this.$refs.iRef)为undefined,会不会this.$refs也是undefined?然而this.$refs是有值的,就是没有iRef,那么到底是为什么? 会不会是需要

    2024年02月11日
    浏览(33)
  • Vue2:用ref方式绑定自定义事件的注意事项

    我们知道绑定自定义事件可以用 ref 方式实现。 但是,这个方式,需要注意下,否则,实现不了我们的效果。 需求是这样的,我们通过 ref 绑定的事件,来给 App 的 data 块中的变量赋值。 基本写法: 父组件 App 中 methods 函数: 给 Student 组件绑定自定义事件 test 此处的 this 是谁

    2024年01月19日
    浏览(50)
  • Vue3——第十二章(Props)

    一个组件需要显式声明它所接受的 props,这样 Vue 才能知道外部传入的哪些是 props,哪些是透传 attribute 在使用 script setup 的单文件组件中,props 可以使用 defineProps() 宏来声明: 在没有使用 script setup 的组件中,prop 可以使用 props 选项来声明: 注意传递给 defineProps() 的参数和提

    2023年04月09日
    浏览(47)
  • uni-app使用vue3,在元素或组件实例上添加ref,用this.$refs显示undefined

    项目中引用了一个UI组件库,在表单上添加了`ref`属性,方便提交时验证。触发提交方法时显示不存在这个方法或this.$refs为undefined。 解决方法: 引入`getCurrentInstance`,t得到当前组件实例,然后用`ctx.$refs`代替`this.$refs`。这里的`ctx`相当于全局this。 ------------------ 2023/10/27更新-

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包