在元素重新呈現後,Vue中是否有事件被觸發?我有一個更新的對象,這會導致我的模板更新。更新後,我想觸發一個運行jQuery函數的事件。代碼如下所示:渲染後的Vue組件事件
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);
});
}
}
正如你看到的,我嘗試使用監視事件,但是當手表事件觸發,我的網頁還沒有更新。然而blogPost已被更改,但vue仍在渲染頁面。我知道我可以通過添加一個setTimeout來理論上解決這個問題,但我更喜歡更清潔的東西。
謝謝,這是行不通的。我還發現你可以使用'this。$ nextTick(function(){...});'在更新DOM之後執行代碼。我會把它留在這裏以防有人發現它有用 – user2657943