解决vue2.x中数据渲染以及vuex缓存的问题


Posted in Javascript onJuly 13, 2017

最近在学习Vue.js,把自己遇到的问题做个记录,所以,今天添加一点小笔记。

在项目中遇到两个问题,简单的做个笔记来记录自己解决的问题,可能不是很好的处理办法,欢迎提出,自己还在不断优化中...

第一个是vue在加载页面的时候,会先加载静态资源,这个时候数据还没有请求回来,用户会先看到静态的内容(就是页面固定写死的),过一会才会有数据回来渲染,这体验是很差的,其实解决办法也很简单,就是用vue里的 v-if 来判断请求的数据是否返回... 

<div class="container" id="app" v-cloak>
   <div v-if='moneyInMsg.uuid'>
     <in-account-msg :money-in-msg="moneyInMsg"></in-account-msg>
   </div>
 </div>

这里的  v-if = 'moneyInMsg.uuid' 就是来判断数据有没有请求回来,如果请求回来就让他显示,没有请求到数据,就让他loading,这样体验就会好很多。在这里还需要注意的是,v-if判断的数据源,是数据返回的字段,如果两个字段只能存在其一的话,可以v-if ='a || b' 来判断数据是否成功的返回;还要注意的一点是,不能直接在组件里用v-if判断,也不能直接在根标签里判断,直接嵌套一个div就可以解决,并不影响样式,只做数据是否正常返回的显示作用;

第二个就是在使用vuex时,有数据缓存;我遇到的情况是,在列表页点击进入详情页,返回到列表页,在进入另一个详情页的时候,数据会显示之前的数据,同时页面还在loading(接口返回的数据比较慢),过一会数据返回的时候,才重新渲染页面。可能是自己对vuex理解的不够深入,没有在vuex基础上解决这个问题。虽然曲折的解决了这个问题,但是不够zhuang,但是解决了问题,后期再做优化。

在之前解决的方案中,是进入页面的时候,重新刷新页面,重新请求数据,代码如下:

export const refresh = (title) => {
 document.title = title;
 let iframe = document.createElement('iframe');
 iframe.src = require('./mm.jpg');
 iframe.setAttribute('style', 'display:none;');
 let loadFn = function () {
     iframe.removeEventListener('load', loadFn);
     document.body.removeChild(iframe);
     console.info('Page Title IS ' + title);
     iframe = null;
     loadFn = null;
 }
 document.body.appendChild(iframe)
 iframe.addEventListener('load', loadFn);
}

但是没有达到预期的效果,依然会出现上面的情况... 丫的,抓狂了...(被别人催的感觉真的不爽...)

百度啊,google啊,都没有遇到这种情况的?找到一个,还是提问的,没有回答的,好吧,还是靠自己。自己动手,丰衣足食啊...

思路是,定义一个参数status为false,当数据没有请求回来,就不显示,也是用上面的方式来判断,一直loading(请求失败,去掉loading),当数据返回的时候,让status为true;使用$nextTick来更新数据...

贴上自己部分的代码作为参考:

<template>
  <div v-if='status && order.name'>
    //页面展示的数据
  </div>
</template> 
<script>
  export default{
  data(){
    return {
       status:false
      }
    },
    created(){
     var _this = this;
      this.setDd({res =>{
        _this.$nextTick(function(){
          _this.status= true
        });  
      }})
    },
    computed:{
      ...mapGetters({//getter获取的数据})
    },
    methods:{
      ...mapActions(['setDd']) //获取数据的方法
    }
  }   
</script>

处理的方式比较丑陋...,但是实现了想要的效果;这里注意一点就是v-if的判断问题。(v-if='status && order.name')这个用了并且,目的是有数据返回,才能让他显示,如果没有数据,会显示静态的值,数据都为underfind...

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
判断脚本加载是否完成的方法
May 26 Javascript
jQuery之字体大小的设置方法
Feb 27 Javascript
DOM基础教程之模型中的模型节点
Jan 19 Javascript
AngularJS基础知识笔记之过滤器
May 10 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
Sep 16 Javascript
JS中call和apply函数用法实例分析
Jun 20 Javascript
vue组件之间数据传递的方法实例分析
Feb 12 Javascript
分享一个vue项目“脚手架”项目的实现步骤
May 26 Javascript
echarts大屏字体自适应的方法步骤
Jul 12 Javascript
js对象数组和对象的使用实例详解
Aug 27 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
Aug 07 Javascript
JavaScript代码实现微博批量取消关注功能
Feb 05 Javascript
JavaScript反弹动画效果的实现代码
Jul 13 #Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
Jul 13 #Javascript
详解vue-cli + webpack 多页面实例配置优化方法
Jul 13 #Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
Jul 13 #Javascript
js实现图片上传预览原理分析
Jul 13 #Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
Jul 13 #Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
Jul 13 #Javascript
You might like
用PHP实现登陆验证码(类似条行码状)
2006/10/09 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
javascript 闭包疑问
2010/12/30 Javascript
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
Intellij IDEA搭建vue-cli项目的方法步骤
2018/10/20 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
谈谈python垃圾回收机制
2020/09/27 Python
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
巴西购物网站:Submarino
2020/01/19 全球购物
施工工地安全标语
2014/06/07 职场文书
信用卡工资证明格式
2014/09/13 职场文书
给老婆的道歉信
2015/01/20 职场文书
原告代理词范文
2015/05/25 职场文书
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL
分享python函数常见关键字
2022/04/26 Python
vue3不同环境下实现配置代理
2022/05/25 Vue.js