vue使用v-if v-show页面闪烁,div闪现的解决方法

v-if和v-show可能是日常开发中最常用的两个指令,虽然看上去两者功能是类似的,但是两者还是存在很大区别的。

v-if与v-show区别:

在切换 v-if 块时,Vue.js 有一个局部编译/卸载过程,因为 v-if 之中的模板也可能包括数据绑定或子组件。v-if 是真实的条件渲染,因为它会确保条件块在切换当中合适地销毁与重建条件块内的事件监听器和子组件。

v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——在条件第一次变为真时才开始局部编译(编译会被缓存起来)。

相比之下,v-show 简单得多——元素始终被编译并保留,只是简单地基于 CSS 切换。

简单来说二者最大的区别是v-if只会在满足条件时才会编译,而v-show不管是否满足条件始终会编译,v-show的显示与隐藏只是简单的切换CSS的display属性。

适用场景:

明白了二者的本质区别后什么时候适合用v-if什么时候用v-show也变得简单了。

一般来说,v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换 v-show 较好,如果在运行时条件不大可能改变 v-if 较好。

比如说现在很多页面在不同端表现是不同的,最常见的是很多的APP页面在微信端打开时页面上会显示下载的提示,而在APP内部则不会,像这样的情况每个端的状态在加载时就是确定的不会变的就适合用v-if,这样在APP内打开时显示下载的部分直接就不会编译。

而像页面上元素根据不同条件显示/隐藏这样的地方用v-show是最合适的了,因为像这种基本上两个状态要频繁切换,如上面所说,v-show的切换消耗是小于v-if的。
在页面层次结构,数据较多的时候,用v-if或者v-show就会出现div闪现,或者部分闪烁的结果。
可以在根元素添加v-cloak来解决,并且设置它的样式即可。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    /* 在引入的css文件中写入这个*/
        [v-cloak]{
            display: none;
        }
    </style>
</head>
<body>
    <!-- 添加这个v-cloak -->
    <div id='app' v-cloak>
        <div v-if="isShow">
        content
        </div>
    </div>
</body>
</html>
<<script>
    new Vue({
        el: '#app',
        data () {
            return {
                isShow: false
            }
        }
    })
</script>

原文地址:https://www.cnblogs.com/smart-girl/p/10480576.html

时间: 2024-10-11 02:39:36

vue使用v-if v-show页面闪烁,div闪现的解决方法的相关文章

“网站内容可以显示但在页面底部提示错误”的解决方法

“网站内容可以显示但在页面底部提示错误”的解决方法 今天阿D遇到一个问题,客户网站内容可以正常访问,但是网站尾部都出现数据库等一大推错误提示,如下图 起初以为是网站权限问题,设置好权限,还是提示这个错误,然后又去纠结数据库文件和数据库配置文件是否修改好,都检查无误,依旧提示这个错误,最后根据那个warning的路径,发现tplcache 下好多缓存文件,然后把这些在这个目录下新建个目录,把所有缓存文件拖进新建的那个目录,再次访问,就正常了 总结:网站可以正常打开,多了一堆后缀,首先要去看错误提示

AppStore下载失败使用已购页面再试一次解决方法

AppStore载失败 使用已购页面再试一次解决方法 工具/原料 Mac OS 方法/步骤 1.大家可以先试试更改系统 DNS 的方法,由于苹果的 App Store 应用商店在国外,所以 DNS 如果不好会直接影响应用的下载以及更新.直接点击屏幕顶部系统状态栏中的网络图标,再点击“打开网络偏好设置”选项,如图所示. 2.在网络设置窗口中,选中当前已经连接的网络,再点击底部的“高级”按钮,如图所示. 3.接着在网络接口的设置界面中,点击顶部导航栏中的 DNS 栏目,如图所示. 4.随后在 DNS

vue2.0 页面A跳转到页面B,B页面停留在A页面的滚动位置的解决方法

如果页面A沿Y轴滚动一段距离,然后跳转到页面B: 在进入B页面时,B页面已经滚到页面A的距离,返回页面A,发现A还在之前的滚动位置: 这样体验就很不好,所以我们要进行一些处理: 我的方法是:在路由守卫回调中,设置每次进入路由时,将window的scroll值设置为0:window.scroll(0, 0);代码如下 // 全局路由守卫 router.beforeEach((to, from, next) => { // to: Route: 即将要进入的目标 路由对象 // from: Rout

form表单中控件较多,加载完成后切换页面都很慢的解决方法

form表单中控件较多,加载完成后点击都很慢,为什么?我一页面中form表单里面上百个控件(如input.select.radio.checkbox等),还有一些js脚本,加载速度还可以,都能全部显示完毕,但是点击一些事件(如切换tab.关闭模拟框,点击radio等)都非常慢,不知道为什么? 当我采用inprivate模式浏览时,以上动作都很快,但老用inprivate也麻烦,有何办法解决. 按理说form都在客户端显示完全了,其他操作都是客户端的操作阿应该不慢才对阿/. ------解决思路-

javascript通过url向jsp页面传递中文参数乱码解决方法

解决方法:在传递参数前将中文参数进行两次编码,jsp页面获取参数后对中文参数进行一次解码,中文参数就不会变为乱码了! 参考例子: <%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ page import="java.net.*" %><%String str0=&

Vue 做的项目在IE下面打开一片空白解决方法

ie浏览器打开报这个错并且页面空白: 原因:这是因为浏览器对于部分ES6语法识别不出来导致,所以我们要安装一个插件,把ES6语法转换成IE浏览器可以识别的语法. 解决方法: 需要安装 "babel-polyfill" . 然后在入口文件main.js引入  import "babel-polyfill" 完美解决! 注意,改好了之后,要发包到测试环境或者正式环境才能看到效果哦,本地看不了的. 原文地址:https://www.cnblogs.com/silent00

vue样式加scoped后不能覆盖组件的原有样式解决方法

<style scoped> </style> 为了vue页面样式模块化,不对全局造成污染,建议每个页面的style标签加上scoped,表示他的样式只属于当前的页面,父组件的样式不会泄漏到子组件中.但是scoped也会造成一些额外的负担,如无法覆盖原有组件的样式. 可以加 /deep/  . 深度作用选择器 /deep/  or  >>> 如果希望scoped样式中的选择器“深入”,即影响子组件 例子: /deep/ .el-table .red-row { b

(十) ng-inlude指令加载页面失败的原因和解决方法

angularjs中提供的ng-include指令,很类似于JSP中的<jsp:include>用来将多个子页面合并到同一个父页面中,避免父页面过大,可读性差,不好维护. 父页面parent.html代码如下: <html> <head> <script src="angular-1.2.2/angular.js"></script> <script> function rootController($scope,

移动端页面自适应横屏竖屏解决方法思考

之前对于横屏的webapp做过一些尝试,但是始终不是很好的解决方案,前段时间又接触了类似的需求,尝试了感觉更好的解决方案. 之前的方法写的博客:移动网页横竖屏兼容适应的一些体会 这里举的例子还是平时常见的移动端的滑动页面,也就是上下切换页面的"H5". 首先要做的准备: 1.html布局 <div id="wrap"> <div class="pageWrap"> <div class="img11&quo