websocket + vuejs:屏幕闪烁,可见胡须代码
websocket + vuejs: screen flickering, visible mustache code
我使用 websockets 和 vuejs 构建了一个网络应用程序。
在DOM中我想遍历vuejs处理的数据。但是,在建立 websocket 连接并接收到数据之后,数据会在时间轴中稍后设置。
到那时(大约 0.5 秒),您可以在站点本身上看到 vuejs 的 mustache 代码,然后看到它闪烁并添加真实数据。
我在从 websocket 连接接收数据时创建 ViewModel,如下所示:
onMessage: function (e) {
new Vue({
el: '#messages',
data: {
messages: e.data
}
});
}
我已经尝试过在页面加载时初始化 ViewModel,然后设置数据:
var vms = {
messages: new Vue({
el: '#messages',
data: {
messages: {
}
}
})
};
在websocket的onMessage
事件中:
var vm = vms.messages;
vm.$data = { messages: body };
但问题是,在 vm 初始化之前仍然存在延迟。顺序是这样的:
页面加载 -> 可见的 mustache 代码 -> mustache 代码被隐藏,因为数据被设置为一个空对象 -> 真正的数据在被 websocket 接收后显示
关于这件事有什么想法/最佳做法吗?
根据 dandavis 的评论,我在 DOM 和 v-class="hidden: !done"
中添加了 "hidden" class (display: none
) 以切换可见性的 DOM。 done
是ViewModel数据中的键值对。
HTML:
<div class="message hidden" v-repeat="messages" v-class="hidden: !done">...</div>
Javascript:
onMessage: function (e) {
new Vue({
el: '#messages',
data: {
messages: e.data,
done: true
}
});
}
在阅读 api 文档之前,我遇到了同样的问题。
这是 v-cloak directives!
的 link
HTML:
<div id="demo" v-cloak><p>{{ test }}</p></div>
CSS:
[v-cloak] {display: none}
我使用 websockets 和 vuejs 构建了一个网络应用程序。
在DOM中我想遍历vuejs处理的数据。但是,在建立 websocket 连接并接收到数据之后,数据会在时间轴中稍后设置。
到那时(大约 0.5 秒),您可以在站点本身上看到 vuejs 的 mustache 代码,然后看到它闪烁并添加真实数据。
我在从 websocket 连接接收数据时创建 ViewModel,如下所示:
onMessage: function (e) {
new Vue({
el: '#messages',
data: {
messages: e.data
}
});
}
我已经尝试过在页面加载时初始化 ViewModel,然后设置数据:
var vms = {
messages: new Vue({
el: '#messages',
data: {
messages: {
}
}
})
};
在websocket的onMessage
事件中:
var vm = vms.messages;
vm.$data = { messages: body };
但问题是,在 vm 初始化之前仍然存在延迟。顺序是这样的:
页面加载 -> 可见的 mustache 代码 -> mustache 代码被隐藏,因为数据被设置为一个空对象 -> 真正的数据在被 websocket 接收后显示
关于这件事有什么想法/最佳做法吗?
根据 dandavis 的评论,我在 DOM 和 v-class="hidden: !done"
中添加了 "hidden" class (display: none
) 以切换可见性的 DOM。 done
是ViewModel数据中的键值对。
HTML:
<div class="message hidden" v-repeat="messages" v-class="hidden: !done">...</div>
Javascript:
onMessage: function (e) {
new Vue({
el: '#messages',
data: {
messages: e.data,
done: true
}
});
}
在阅读 api 文档之前,我遇到了同样的问题。 这是 v-cloak directives!
的 linkHTML:
<div id="demo" v-cloak><p>{{ test }}</p></div>
CSS:
[v-cloak] {display: none}