我试图在完全呈现之前隐藏 vue.js 模板的内容。考虑以下模板:
<div class="loader">
<table class="hidden">
<tr v-for="log in logs">
<td>{{log.timestamp}}</td>
<td>{{log.event}}</td>
</tr>
</table>
</div>
当我在服务器上渲染此模板时,用户会在渲染之前看到 <tr>
元素的内容。出于这个原因,我使用类 hidden
在完全渲染之前隐藏它。
同样在渲染之前,我展示了一个带有一些动画进度条的加载器元素。
渲染完成后,我只需在 jQuery 中调用 element.show()
并隐藏进度条。我的问题是:可以混合使用 jQuery 和 vue.js 来实现这一点吗?
var vueLogs = new Vue({
el: "#checkInLogsHolder",
data: {logs: []}
});
var holder = $("#checkInLogsHolder");
function response(payload) {
// hiding the loader animation
holder.find(".loader").remove();
// showing the rendered table
holder.find("table").show();
vueLogs.logs.unshift(payload);
}
有没有更好的方法来做到这一点?
原文由 Vojtěch 发布,翻译遵循 CC BY-SA 4.0 许可协议
Vue 已经内置了
v-cloak
指令,你只需要添加相关的 css 类:然后将其应用到您的元素,如下所示:
这是 JSFiddle: https ://jsfiddle.net/2jbe82hq/
如果您在该小提琴中删除
v-cloak
您将在安装实例之前看到带胡子的{{message}}
。如果要在从服务器检索数据时显示
loader
,则将布尔标志与v-if
结合起来以显示和隐藏加载程序:然后你可以这样做:
这是 JSFiddle: https ://jsfiddle.net/fa70phLz/
也可以使用
loading
类,然后使用v-bind:class
应用和删除基于标志的类,如果你想用loader
。