Vue-Komponentenereignis nach dem Rendern

Lesezeit: 2 Minuten

Benutzer-Avatar
Benutzer2657943

Gibt es ein Ereignis in Vue, das ausgelöst wird, nachdem ein Element neu gerendert wurde? Ich habe ein Objekt, das aktualisiert wird, wodurch meine Vorlage aktualisiert wird. Nachdem es aktualisiert wurde, möchte ich ein Ereignis auslösen, das eine jQuery-Funktion ausführt. Der Code sieht so aus:

template: `
    <div class="undo-margin">
        <div class="gradient">
            <img v-bind:src="https://stackoverflow.com/questions/44659277/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);
        });
    }
}

Wie Sie sehen, habe ich versucht, das Überwachungsereignis zu verwenden, aber wenn das Überwachungsereignis ausgelöst wird, wird meine Seite noch nicht aktualisiert. blogPost wurde jedoch geändert, aber vue rendert die Seite immer noch. Ich weiß, dass ich das theoretisch beheben könnte, indem ich ein setTimeout hinzufüge, aber ich würde etwas Saubereres bevorzugen.

Benutzer-Avatar
Stefan Gilboy

updated könnte das sein, wonach du suchst.

Vue2 https://v2.vuejs.org/v2/api/#updated

Bearbeiten: Jetzt, da Vue3 die aktuelle Version ist, sind hier die Links zu den relevanten Lifecycle-Hooks.

Vue3-Kompositions-API https://vuejs.org/api/composition-api-lifecycle.html#onupdated

Vue3-Options-API https://vuejs.org/api/options-lifecycle.html#updated

  • danke, das funktioniert. Ich habe auch herausgefunden, dass Sie verwenden können this.$nextTick(function () {...}); zum Ausführen von Code nach dem Aktualisieren des DOM. Ich lasse es hier, falls jemand es auch nützlich findet

    – Benutzer2657943

    20. Juni 2017 um 20:44 Uhr

  • Beachten Sie dies in einigen Umgebungen updated() wird nicht aufgerufen, wenn Sie Ihre Seite aktualisieren: Siehe “Dieser Hook wird während des serverseitigen Renderns nicht aufgerufen” unter vuejs.org/v2/api/#updated.

    – Philipp Callender

    4. Juli 2018 um 9:42 Uhr


Benutzer-Avatar
David Hallberg Jönsson

Aktualisiert() sollte das sein, was du suchst:

Wird nach einer Datenänderung aufgerufen, wird das virtuelle DOM neu gerendert und gepatcht.

Das DOM der Komponente wurde aktualisiert, wenn dieser Hook aufgerufen wird, sodass Sie hier DOM-abhängige Operationen ausführen können.

1297910cookie-checkVue-Komponentenereignis nach dem Rendern

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy