$nextTick的使用方式

点击count++, 马上通过"原生DOM"拿标签内容, 无法拿到新值

Move.vue 

<template>
  <div>
      <p>1. 获取原生DOM元素</p>
      <h1 id="h" ref="myH">我是一个孤独可怜又能吃的h1</h1>
      <p>2. 获取组件对象 - 可调用组件内一切</p>
      <Demo ref="de"></Demo>
      <p>3. vue更新DOM是异步的</p>
      <p ref="myP">{{ count }}</p>
      <button @click="btn">点击count+1, 马上提取p标签内容</button>
  </div>
</template>

<script>
// 目标: 获取组件对象
// 1. 创建组件/引入组件/注册组件/使用组件
// 2. 组件起别名ref
// 3. 恰当时机, 获取组件对象
import Demo from './Child/Demo'
export default {
    mounted(){
        console.log(document.getElementById("h")); // h1
        console.log(this.$refs.myH); // h1

        let demoObj = this.$refs.de;
        demoObj.fn()
    },
    components: {
        Demo
    },
    data(){
        return {
            count: 0
        }
    },
    methods: {
        btn(){
            this.count++; // vue监测数据更新, 开启一个DOM更新队列(异步任务)
            console.log(this.$refs.myP.innerHTML); // 0

            // 原因: Vue更新DOM异步
            // 解决: this.$nextTick()
            // 过程: DOM更新完会挨个触发$nextTick里的函数体
             this.$nextTick(() => {
                console.log(this.$refs.myP.innerHTML); // 1
            })
        }
    }
}
</script>

正常情况下如果想要获得 dom的数据 你肯定以为直接打印就可以了 但是不然

this.$nextTick(() => {

        console.log(this.$refs.myP.innerHTML); // 1

      });

这个方法 可以在DOM异步请求完后 完全更新完毕 才触发的函数 

可以实时获得最新的最真实的DOM数据

效果图如下

打印的第一个数 是异步状态下打印 count 数据 但是肯定是 慢于我们眼睛看到的

而$nextTick的方法 确是可以等DOM更新完毕后 获取数据

 

 那么讲了这些 $nextTick 能怎么用呢?  下面给大家展示一种使用场景

$nextTick使用场景

 

components/Tick.vue

<template>
  <div>
      <input ref="myInp" type="text" placeholder="这是一个输入框" v-if="isShow">
      <button v-else @click="btn">点击我进行搜索</button>
  </div>
</template>

<script>
// 目标: 点按钮(消失) - 输入框出现并聚焦
// 1. 获取到输入框
// 2. 输入框调用事件方法focus()达到聚焦行为
export default {
    data(){
        return {
            isShow: false
        }
    },
    methods: {
        async btn(){
            this.isShow = true;
            // this.$refs.myInp.focus()
            // 原因: data变化更新DOM是异步的
            // 输入框还没有挂载到真实DOM上
            // 解决:
            // this.$nextTick(() => {
            //     this.$refs.myInp.focus()
            // })
            // 扩展: await取代回调函数
            // $nextTick()原地返回Promise对象
            await this.$nextTick()
            this.$refs.myInp.focus()
        }
    }
}
</script>

 

  1. $nextTick函数原地返回什么?

    1. Promise对象

  2. 如何在JS中主动触发标签的事件呢?

    1. 获取到DOM对象, 调用事件方法

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在进行Node.js编程时,使用$nexttick函数是不需要进行下载的。$nexttick是Node.js提供的一个函数,它是用于将一个回调函数推迟到下一个事件循环中执行。在Node.js的事件驱动模型中,每个事件循环中都会依次执行任务队列中的任务,而$nexttick函数可以将一个回调函数插入到任务队列的末尾,等待下一个事件循环时执行。 使用$nexttick函数的过程可以简单示例如下: ``` console.log('start'); $nextTick(() => { console.log('from next tick'); }); console.log('end'); ``` 以上代码执行结果为: ``` start end from next tick ``` 从执行结果可以看出,$nexttick函数中的回调函数会在当前事件循环执行完成后立即执行,而不是等待任务队列中的其他任务执行完毕。这就保证了回调函数的及时调用,并且不会被其他任务所阻塞。 需要注意的是,Node.js中的$nexttick函数是属于全局对象process的一部分,因此在使用时不需要进行额外的下载或安装。只要使用Node.js环境进行开发,就可以直接使用$nexttick函数了。 ### 回答2: $nextTick是Vue.js中的一个方法,用于在下次DOM更新循环结束之后执行延迟调用的回调函数。$nextTick函数不需要下载,它是Vue.js框架自带的一个方法。无论是在Vue.js开发中还是在Vue.js的官方文档中,都可以直接使用$nextTick方法进行异步任务的调度。 在Vue.js中,当数据发生改变时,视图不会立即进行更新,而是会进入下一个事件循环中进行更新操作。而$nextTick方法的作用就是在下一个事件循环结束之后执行回调函数,以确保当前数据改变的DOM状态已经更新完毕。 需要注意的是,$nextTick方法是异步的,意味着在调用$nextTick方法之后的代码会先于回调函数执行。这是因为Vue.js为了提升性能,会将多个数据改变的操作进行合并,并通过异步的方式进行更新,以避免频繁的DOM操作。因此,如果需要在数据改变后进行DOM操作,可以将DOM操作代码放在$nextTick的回调函数中,以确保DOM已经更新完成。 总之,$nextTick是Vue.js框架提供的一个方法,用于延迟执行回调函数,以确保DOM已经更新完成。不需要额外下载,可直接在Vue.js开发中使用。 ### 回答3: 使用`$nextTick`不需要下载任何东西。 `$nextTick`是Vue.js框架中的一个方法,它的主要作用是在下次DOM更新循环结束之后执行延迟回调。它的使用方式非常简单,只需在需要执行的代码前加上`this.$nextTick()`即可。 举个例子,当我们修改了Vue实例中的数据并期望在DOM更新后执行某些操作时,就可以使用`$nextTick`。例如,在`mounted`钩子函数中使用`$nextTick`可以保证在组件初始化并且DOM渲染完成后再执行某些操作,以避免操作可能在DOM更新之前执行导致错误或不准确的结果。 `$nextTick`本身是Vue.js框架提供的方法,不需要单独下载或安装。只要在Vue实例中合适的地方使用`this.$nextTick()`即可享受到它的特性。 总之,`$nextTick`是一个非常有用的Vue.js方法,可以帮助我们在DOM更新后执行延迟的回调函数。不需要下载任何东西,只需要在代码中正确使用即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值