详解VUE的状态控制与延时加载刷新


Posted in Javascript onMarch 27, 2017

在实际项目中,我们经常会遇到这种状况,某些数据我们希望等到需要的时候再去获取,或者某些数据我们需要刷新,但是不必立刻刷新,而是延时到展示的时候再去刷新。

在DOM操作的年代,想要实现这样的功能可能会稍微麻烦一些,然而当我们使用数据驱动的mv*框架的时候,这个想要实现这个需求就容易了许多。

当我们理解数据驱动时,我们很容易想到将需要刷新的状态也设置成为某个数据,在需要刷新的地方watch这个数据,当刷新状态发生变动的时候,watch生效并执行刷新的方法,这就实现了延时刷新。而且我们不再需要关注延时的过程,只需要更改刷新状态就可以了。

现在我们用Vue来实现一个状态驱动的延时刷新。

首先我们利用vue的混合来实现一个统一的刷新接口,你可以把混合理解成一种特殊的继承来使用。

//刷新mixin
var refreshMixin = {
  props: ['refresh'],
  watch: {
    //状态监视
    'refresh': function (val) {
      //console.log(val)
      //刷新列表
      val && this.refreshData()
    },
  },
  created: function () {
    this.refresh && this.refreshData()
  },
}

在这个refreshMixin中,当组建创建或者refresh状态发生变更时,判断状态是否是true,如果是true,则调用组建的refreshData方法。

我们在组建当中混合这个refreshMixin,并且实现refreshData方法,就可以实现状态驱动刷新。

注意,refresh状态使用双向绑定,并且在调用refreshData方法时立刻将refresh状态置为false,以便下次调用。

下面给予一个完整的demo

<html>
<head>
  <meta charset="utf-8" />
  <title></title>
  <script src="http://cdn.jsdelivr.net/vue/1.0.26/vue.min.js"></script>
</head>
<body>
  <div id="root" style="padding-left:10%;padding-top:5%;">
    <delay-test v-bind:refresh.sync="testRefresh"
          v-bind:num.sync="num"></delay-test>
    <button type="button" v-on:click="refreshTest">刷新组件数据</button>
  </div>
  <template id="delayTempl">
    <div>
      延时加载数据: {{num}}
    </div>
  </template>

  <script type="text/javascript">
    //刷新mixin
    var refreshMixin = {
      props: ['refresh'],
      watch: {
        //状态监视
        'refresh': function (val) {
          //console.log(val)
          //刷新列表
          val && this.refreshData()
        },
      },
      created: function () {
        this.refresh && this.refreshData()
      },
    }
    //延时加载数据组件
    var delayComp = Vue.extend({
      template: '#delayTempl',
      mixins: [refreshMixin],
      props: ['num'],
      methods: {
        refreshData: function () {
          var self = this
          //注意,refresh状态使用双向绑定,并且在调用refreshData方法时立刻将refresh状态置为false,以便下次调用
          self.refresh = false
          setTimeout(function () {
            self.num++
          }, 5000)
        },
      },
    })
    //根实例
    var vm = new Vue({
      el: '#root',
      data: {
        testRefresh: false,
        num: 0,
      },
      methods: {
        refreshTest: function () {
          this.testRefresh = true
        }
      },
      components: {
        delayTest: delayComp,
      }
    })
  </script>
</body>
</html>

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

Javascript 相关文章推荐
基本jquery的控制tabs打开的数量的代码
Oct 17 Javascript
jquery ajax提交整个表单元素的快捷办法
Mar 27 Javascript
关于JS管理作用域的问题
Apr 10 Javascript
js父页面与子页面不同时显示的方法
Oct 16 Javascript
Node.js 文件夹目录结构创建实例代码
Jul 08 Javascript
利用vscode编写vue的简单配置详解
Jun 17 Javascript
浅谈node中的cluster集群
Jun 02 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
Sep 20 Javascript
Vue路由之JWT身份认证的实现方法
Aug 26 Javascript
如何利用javascript接收json信息并进行处理
Aug 06 Javascript
js实现弹幕飞机效果
Aug 27 Javascript
Vue h函数的使用详解
Feb 18 Vue.js
vue2.0实战之使用vue-cli搭建项目(2)
Mar 27 #Javascript
js实现三级联动效果(简单易懂)
Mar 27 #Javascript
JS数组去重(4种方法)
Mar 27 #Javascript
JS实现隔行换色的表格排序
Mar 27 #Javascript
JavaScript实现获取远程的html到当前页面中
Mar 26 #Javascript
axios学习教程全攻略
Mar 26 #Javascript
js oncontextmenu事件使用详解
Mar 25 #Javascript
You might like
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
php array_keys 返回数组的键名
2016/10/25 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
js实现录音上传功能
2019/11/22 Javascript
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
python数组过滤实现方法
2015/07/27 Python
Python实例一个类背后发生了什么
2016/02/09 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
Python机器学习之SVM支持向量机
2017/12/27 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
2014/08/19 HTML / CSS
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
社区工作者感言
2014/03/02 职场文书
教职工代表大会主持词
2014/04/01 职场文书
乐山大佛导游词
2015/02/02 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
小型婚礼主持词
2015/06/30 职场文书
七年级生物教学反思
2016/02/20 职场文书
vue中data里面的数据相互使用方式
2022/06/05 Vue.js