繁体   English   中英

Vue watcher 在新数据绑定之前执行?

[英]Vue watcher executed before the new data is bound?

我正在使用这段代码:

var vueApp = new Vue({
    el: '#app',
    data: {
        modalKanji: {}
    },
    methods: {
        showModalKanji(character) {
            sendAjax('GET', '/api/Dictionary/GetKanji?character=' + character, function (res) { vueApp.modalKanji = JSON.parse(res); });
        }
    },
    watch: {
        'modalKanji': function (newData) {
            setTimeout(function () {
                uglipop({
                    class: 'modalKanji', //styling class for Modal
                    source: 'div',
                    content: 'divModalKanji'
                });
            }, 1000);
        }
    }
});

我有一个元素,当点击它时,会显示一个包含汉字数据的弹出窗口:

<span @click="showModalKanji(kebChar)" style="cursor:pointer;>
    {{kebChar}}
</span>

<div id="divModalKanji" style='display:none;'>
    <div v-if="typeof(modalKanji.Result) !== 'undefined'">
        {{ modalKanji.Result.literal }}
    </div>
</div>

它有效,但仅当与 setTimeout 延迟一起使用以“让 Vue 有时间更新其模型”...如果我删除 setTimeout 以便在 watch 函数中立即调用代码,弹出数据始终为“1 次迭代后面”,它显示了我点击的上一个汉字的信息......

有没有办法在 Vue 完成绑定新数据后调用观察者函数?

我认为您需要nextTick ,请参阅Async-Update-Queue

watch: {
    'modalKanji': function (newData) {
        this.$nextTick(function () {
            uglipop({
                class: 'modalKanji', //styling class for Modal
                source: 'div',
                content: 'divModalKanji'
            });
        });
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM