nextTick函数的使用

举报
一向很安静 发表于 2022/02/28 16:01:31 2022/02/28
【摘要】 上一篇简单的和大家介绍了关于订阅和发布外部的 ***pubsub-js*** 组件,在本篇我会给大家介绍一下关于vue中一个常用的一个函数这个是比较重要的内容这个就是***nextTick***这个aip是官方给我们的一个方法用是DOM 更新结束后执行其指定的回调。### [Vue.nextTick( [callback, context] )](https://cn.vuejs.org/v...

上一篇简单的和大家介绍了关于订阅和发布外部的 ***pubsub-js*** 组件,在本篇我会给大家介绍一下关于vue中一个常用的一个函数这个是比较重要的内容这个就是***nextTick***这个aip是官方给我们的一个方法用是DOM 更新结束后执行其指定的回调。### [Vue.nextTick( [callback, context] )](https://cn.vuejs.org/v2/api/#Vue-nextTick "Vue.nextTick( [callback, context] )")


![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/05a11740193e4999a3ae82d6ecbd5b86~tplv-k3u1fbpfcp-watermark.image?)

这个$nextTick简单来说类似于一个没有时间的定时器,在全部触发完成后才会触发的一个时间,这个nextTick会在我们平时开发中用的比较多,所以需要记下来,虽然不难但是好用。下面我讲进行代码的演示操作:

## 代码演示

```js
<template>
    <li>
        <label>
            <input type="checkbox" :checked="todo.done" @change="handleCheck(todo.id)"/>
            <!-- 如下代码也能实现功能,但是不太推荐,因为有点违反原则,因为修改了props -->
            <!-- <input type="checkbox" v-model="todo.done"/> -->
            <span v-show="!todo.isEdit">{{todo.title}}</span>
            <input 
                type="text" 
                v-show="todo.isEdit" 
                :value="todo.title" 
                @blur="handleBlur(todo,$event)"
                ref="inputTitle"
            >
        </label>
        <button class="btn btn-danger" @click="handleDelete(todo.id)">删除</button>
        <button v-show="!todo.isEdit" class="btn btn-edit" @click="handleEdit(todo)">编辑</button>
    </li>
</template>

<script>
    import pubsub from 'pubsub-js'
    export default {
        name:'MyItem',
        //声明接收todo
        props:['todo'],
        methods: {
            //勾选or取消勾选
            handleCheck(id){
                //通知App组件将对应的todo对象的done值取反
                // this.checkTodo(id)
                this.$bus.$emit('checkTodo',id)
            },
            //删除
            handleDelete(id){
                if(confirm('确定删除吗?')){
                    //通知App组件将对应的todo对象删除
                    // this.deleteTodo(id)
                    // this.$bus.$emit('deleteTodo',id)
                    pubsub.publish('deleteTodo',id)
                }
            },
            //编辑
            handleEdit(todo){
                if(todo.hasOwnProperty('isEdit')){
                    todo.isEdit = true
                }else{
                    // console.log('@')
                    this.$set(todo,'isEdit',true)
                }
                this.$nextTick(function(){
                    this.$refs.inputTitle.focus()
                })
            },
            //失去焦点回调(真正执行修改逻辑)
            handleBlur(todo,e){
                todo.isEdit = false
                if(!e.target.value.trim()) return alert('输入不能为空!')
                this.$bus.$emit('updateTodo',todo.id,e.target.value)
            }
        },
    }
</script>

```
下面对今天所讲的进行一下总结和归纳好让我们今天学到的东西有个明确的认知;
## 总结nextTick

1. 语法:```this.$nextTick(回调函数)```
2. 作用:在下一次 DOM 更新结束后执行其指定的回调。
3. 什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在nextTick所指定的回调函数中执行。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。