渲染后的Vue组件事件

use*_*943 25 javascript jquery vuejs2

Vue中是否有一个事件在元素重新渲染后被触发?我有一个更新的对象,这会导致我的模板更新.更新后,我想触发一个运行jQuery函数的事件.代码如下所示:

template: `
    <div class="undo-margin">
        <div class="gradient">
            <img v-bind:src="blogPost.thumbnail"/>
            <h1 class="align-bottom">{{blogPost.title}}</h1>
        </div>

        <div class="container bg-faded">
            <article v-html="blogPost.article"></article>
        </div>
    </div>

`,
props: ["blogid"],
data: function () {
    return blogPageData;
},
mounted: function () {
    const blogid = jQuery("#blogPage").attr("blogid");
    if (this.authdata.roles.indexOf("Administrator") !== -1) {
        this.isAdmin = true;
    }

    this.getBlogPost(blogid);
},
methods: {
    getBlogPost: function (blogid) {
        var element = this;
        $.ajax({
            url: `/api/blog/${blogid}`,
            type: "get",
            headers: headers,
            success: function (data) {
                if (data === undefined) {
                    window.location.replace("/blog");
                } else {
                    element.isDetails = true;
                    element.blogPost = data;
                }
            },
            error: function (data) {
                window.location.replace("/blog");
                errorData.error = data.responseText;
            }
        });
    }
},
watch: {
    blogPost: function () {
        console.log(this.blogPost);
        jQuery("pre").each((i, e) => {
            hljs.highlightBlock(e);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我尝试使用监视事件,但是当监视事件触发时,我的页面尚未更新.但是blogPost已被更改,但vue仍在渲染页面.我知道理论上我可以通过添加一个setTimeout来解决这个问题,但我更喜欢更干净的东西.

Ste*_*hen 49

updated可能就是你要找的东西.https://vuejs.org/v2/api/#updated

  • 谢谢,这确实有效.我还发现你可以使用`this.$ nextTick(function(){...});`来更新DOM后执行代码.我会留在这里,以防有人发现它也有用 (11认同)
  • 请注意,在某些环境中,刷新页面时不会调用 `updated()`:请参阅 https://vuejs.org/v2/api/#updated 上的“在服务器端渲染期间不调用此钩子”。 (2认同)

Dav*_*son 9

updated()应该是您正在寻找的:

在数据更改后调用会导致重新呈现和修补虚拟DOM.

调用此挂钩时,组件的DOM将会更新,因此您可以在此处执行与DOM相关的操作.