nextTick与ref的介绍与案例

nextTick

 vue:异步更新队列。
  vue在观察到数据变化时,并不会直接更新DOM,而是开启一个队列(让大家都去排队),缓冲在同一事件中所有的数据变化。

  for循环,对num++执行100次,在页面上输出结果。
  1.num的值每改变一次,就操作DOM修改一下页面的结果 (操作了100次的DOM)
  2.等100次循环执行完了,操作DOM修改一下页面的结果  (只操作了1次DOM)

  nextTick就是用来知道什么时候DOM更新完成的。


  1.active的值发现了变化
  2.看看还有没有其他的值要变化
  3.所有的值都变化了,再去更新DOM
  4.DOM更新完成后,执行nextTick中的回调函数。

代码示例
css部分

  <style>
        #box {
            width: 300px;
            height: 300px;
            border-radius: 10px;
            margin-top: 10px;
            margin-left: 10px;
            background-color: lightsalmon;
        }
    </style>

body部分

<body>
    <div id="app">
        <button @click="getInfo">显示/隐藏</button>
        <p>{{num}}</p>
        <input type="text" v-model="num">
        <div id="box" v-if="isActive">
            <p>昨天小雪</p>
        </div>
        <button @click="getBox">获取Box内容</button>
    </div>
    <script>

        var vm = new Vue({
            el: '#app',
            data: {
                isActive: false,
                num: 10
            },
            methods: {
                getInfo() {
                    this.isActive = !this.isActive
                     //在执行上面代码之后,box并不会立刻创建,而是等待该事件执行完。
                   console.log(document.getElementById("box"));    //undefind
                   this.$nextTick(()=>{
                       let data = document.getElementById("box").innerHTML;
                       console.log(data);   //<p>昨天小雪</p>
                   })
                },
                getBox(){
                    console.log(document.getElementById("box"));   //  <div id="box"><p>昨天小雪</p> </div>
                }
            }


        })


    </script>
</body>

ref

 ref可以获取本页面的DOM元素。

    (1)在元素上  ref="自定义名称"
    (2)在获取时  this.$refs.自定义名称

    ref作用在组件上时,通过 this.$refs.自定义名称获取的不是元素节点,而是 vue组件对象。

    $el可以获取 组件的模板内容

代码示例

<body>
    <div id="app">
        <button @click="fn">点击</button>
        <div ref="box">123</div>
        <hello ref="tk"></hello>
    </div>
     <template id="hello">
        <div>
            {{msg}}
        </div>
   </template>
    <script>
        var vm = new Vue({
            el:"#app",
            data:{},
            methods:{
                fn(){
                    console.log(this.$refs.tk.msg);   //可以打印听课不停学
                } 
            },
            components:{
                hello:{
                    template:"#hello",
                    data(){
                        return {
                            msg:"听课不停学",
                        }
                    }
                }
            }
        })
    </script>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值