详解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 相关文章推荐
IE 上下滚动展示模仿Marquee机制
Dec 20 Javascript
30个最好的jQuery 灯箱插件分享
Apr 25 Javascript
JavaScript 判断日期格式是否正确的实现代码
Jul 04 Javascript
DOM基础教程之使用DOM控制表单
Jan 20 Javascript
javascript实现模拟时钟的方法
May 13 Javascript
JavaScript动态插入CSS的方法
Dec 10 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
Apr 06 Javascript
全面解析标签页的切换方式
Aug 21 Javascript
JavaScript操作文件_动力节点Java学院整理
Jun 30 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
Sep 12 Javascript
详解Angular系列之变化检测(Change Detection)
Feb 26 Javascript
浅谈JS中this在各个场景下的指向
Aug 14 Javascript
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
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
django 外键创建注意事项说明
2020/05/20 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
幼儿园教师演讲稿
2014/05/06 职场文书
阅兵口号
2014/06/19 职场文书
二手房购房协议书范本
2014/10/05 职场文书
综治工作汇报材料
2014/10/27 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
高中英语教学反思范文
2016/03/02 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书