vm.$nextTick( [callback] )

将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>

<body>
    <div id="app">
        <ul>
            <li ref="li" v-for="(item,index) in list" :key="index">{{item.type}}</li>
        </ul>
        <button @click="getData">获取数据</button>
    </div>
    <script>
        let vm = new Vue({
            el: "#app",
            data: {
                list: ''
            },
            methods: {
                getData() {
                    let url = 'https://api.apiopen.top/getJoke?page=1&count=2&type=video';
                    let that = this;
                    $.ajax({
                        url: url,
                        type: 'GET',
                        success(data) {
                            console.log(data);
                            that.list = data.result;
                            console.log(that.$refs.li);
                            // 获取到数据时使用
                            that.$nextTick(() => {
                                console.log(that.$refs.li, 'nextTick');
                            });
                        },
                        fail(err) {
                            console.log(err);
                        }
                    });
                }
            },
            watch: {
                // 监听属性,数据变化时使用,如果监听属性还会改变就不合适这样使用
                list() {
                    this.$nextTick(() => {
                        console.log(this.$refs.li, 'watch');
                    });
                }
            }
        });
    </script>
</body>

</html>

 

Logo

前往低代码交流专区

更多推荐