zoukankan      html  css  js  c++  java
  • Vue

    Vue.js 推荐以“数据驱动”的方式思考,避免直接接触DOM。但是有时候会遇到这种情况:当在数据变化后,我们需要操作相应的DOM,如下面的例子:

    <template>
        <div>
          <ul>
            <li v-for="(item,index) in message" :key="index" ref="list">{{item}}</li>
          </ul>
        </div>
    </template>
    
    <script>
    export default{
        data(){
            return {
                message:[]
            }
        },
        mounted(){
            this.message = [1,2,3,4];
            console.log(this.$refs.list); //无dom元素输出为空
        }
    }
    </script>

    这种情况该怎么处理呢?

      由于Vue 异步执行 DOM 更新:即数据变化之后,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变;从而你能看到页面这个时候已经显示数据了,但是操作dom的时候无输出,表明此时DOM还没有更新。如果想要在此时操作DOM的情况,可以使用一下两种方式:

    1.setTimeout

      setTimeout(()=>{
        console.log(this.$refs.list);
      },20)
     
    2.Vue.nextTick(callback)
      this.$nextTick(function(){
        console.log(this.$refs.list);
      })
     
    以上两种方式都是在DOM更新完成后调用
     
    了解更多原理,可参照:https://www.cnblogs.com/xujiazheng/p/6852124.html
  • 相关阅读:
    L3-015. 球队“食物链”【DFS + 剪枝】
    L3-002. 堆栈【主席树 or 线段树 or 分块】
    PTA L1-006 连续因子【暴力模拟】
    【路由和交换之H3C自导自演】
    【ospf-stub区域配置】
    【ospf-链路验证】
    【ospf-vlink虚拟连接】
    【c学习-14】
    【c学习-13】
    【php学习-5】
  • 原文地址:https://www.cnblogs.com/changxue/p/9134164.html
Copyright © 2011-2022 走看看