详解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 相关文章推荐
JavaScript 组件之旅(三):用 Ant 构建组件
Oct 28 Javascript
理解Javascript_02_理解undefined和null
Oct 11 Javascript
jquery获得下拉框值的代码
Aug 13 Javascript
js 数组去重的四种实用方法
Sep 09 Javascript
jQuery给指定的table动态添加删除行的操作方法
Oct 12 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
Dec 26 Javascript
JavaScript中最常用的10种代码简写技巧总结
Jun 28 Javascript
深入探究angular2 UI组件之primeNG用法
Jul 26 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
Sep 21 Javascript
Vue项目中跨域问题解决方案
Jun 05 Javascript
angularJs在多个控制器中共享服务数据的方法
Sep 30 Javascript
JavaScript的console命令使用实例
Dec 03 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
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
Python之eval()函数危险性浅析
2014/07/03 Python
python读取oracle函数返回值
2016/07/18 Python
Python实现字符串格式化输出的方法详解
2017/09/20 Python
深入理解Python爬虫代理池服务
2018/02/28 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
css 省略号 css3让多余的字符串消失并附加省略号的实现代码
2013/02/07 HTML / CSS
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
2018/10/08 HTML / CSS
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
毕业生找工作的求职信范文
2013/12/24 职场文书
秋天的雨教学反思
2014/04/27 职场文书
本科生就业推荐信
2014/05/19 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
一年级小学生评语大全
2014/12/25 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
趣味运动会赞词
2015/07/22 职场文书
2016年党建工作简报
2015/11/26 职场文书
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL
nginx七层负载均衡配置详解
2022/07/15 Servers