国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解VUE的狀態控制與延時加載刷新

2024-05-06 15:19:23
字體:
來源:轉載
供稿:網友

在實際項目中,我們經常會遇到這種狀況,某些數據我們希望等到需要的時候再去獲取,或者某些數據我們需要刷新,但是不必立刻刷新,而是延時到展示的時候再去刷新。

在DOM操作的年代,想要實現這樣的功能可能會稍微麻煩一些,然而當我們使用數據驅動的mv*框架的時候,這個想要實現這個需求就容易了許多。

當我們理解數據驅動時,我們很容易想到將需要刷新的狀態也設置成為某個數據,在需要刷新的地方watch這個數據,當刷新狀態發生變動的時候,watch生效并執行刷新的方法,這就實現了延時刷新。而且我們不再需要關注延時的過程,只需要更改刷新狀態就可以了。

現在我們用Vue來實現一個狀態驅動的延時刷新。

首先我們利用vue的混合來實現一個統一的刷新接口,你可以把混合理解成一種特殊的繼承來使用。

//刷新mixinvar 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>            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 巴楚县| 竹溪县| 安新县| 昌都县| 新营市| 宁津县| 罗定市| 原阳县| 永顺县| 西昌市| 通道| 日喀则市| 天长市| 蚌埠市| 大城县| 虹口区| 新宁县| 英超| 桂林市| 大宁县| 砀山县| 临潭县| 从江县| 张家川| 关岭| 济宁市| 随州市| 泰宁县| 新邵县| 抚宁县| 星座| 定西市| 巴塘县| 斗六市| 揭西县| 民勤县| 濮阳县| 隆化县| 漳浦县| 广饶县| 邹平县|