欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue 實(shí)現(xiàn)全選全不選的示例代碼

 更新時(shí)間:2018年03月29日 13:43:51   作者:Mr_ZhangQian  
本篇文章主要介紹了vue 實(shí)現(xiàn)全選全不選的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

全選功能可以說是前端開發(fā)中非常常見的一個(gè)功能,以前的項(xiàng)目開發(fā)用jQuery開發(fā)比較多。最近在使用vue前端框架重構(gòu)之前的項(xiàng)目。從jQuery到vue的轉(zhuǎn)變主要是一個(gè)思想想的轉(zhuǎn)變,是將原有的直接操作dom的思想轉(zhuǎn)變到操作數(shù)據(jù),用數(shù)據(jù)驅(qū)動(dòng)dom,也是vue框架的一個(gè)核心思想,思想轉(zhuǎn)變過來,對(duì)功能的實(shí)現(xiàn)自然容易理解一些。

例如下面這個(gè)簡(jiǎn)單的demo


按照jQuery的思想來做的話,要選中全選checkbox和所有的checkbox項(xiàng),分別注冊(cè)選中事件,判斷選中狀態(tài)來給相關(guān)的checkbox設(shè)置對(duì)應(yīng)的狀態(tài),這就涉及到很多的dom操作。

下面就看一下vue數(shù)據(jù)驅(qū)動(dòng)dom的思想來實(shí)現(xiàn)這一功能。

vue數(shù)據(jù)驅(qū)動(dòng)dom實(shí)現(xiàn)功能

<div class="checkbox">
  <label for="quan">
    <!-- 這里的 $event 是將當(dāng)前對(duì)象傳入進(jìn)去,具體詳情請(qǐng)參照vue官方文檔 -->
    <input id="quan" type="checkbox" @click="checkAll($event)"> 全選
  </label>
  <label>
    <!-- v-model 雙向數(shù)據(jù)綁定命令 -->
    <input class="checkItem" type="checkbox" value="apple" v-model="checkData"> apple
  </label>
  <label>
    <input class="checkItem" type="checkbox" value="banana" v-model="checkData"> banana
  </label>
  <label>
    <input class="checkItem" type="checkbox" value="orange" v-model="checkData"> orange
  </label>
</div>
<script>
  new Vue({
    el: '#app',
    data(){
      return {
        checkData: [] // 雙向綁定checkbox數(shù)據(jù)數(shù)組
      }
    },
    watch: { // 監(jiān)視雙向綁定的數(shù)據(jù)數(shù)組
      checkData: {
        handler(){ // 數(shù)據(jù)數(shù)組有變化將觸發(fā)此函數(shù)
          if(this.checkData.length == 3){
            document.querySelector('#quan').checked = true;
          }else {
            document.querySelector('#quan').checked = false;
          }
        },
        deep: true // 深度監(jiān)視
      }
    },
    methods: {
      checkAll(e){ // 點(diǎn)擊全選事件函數(shù)
        var checkObj = document.querySelectorAll('.checkItem'); // 獲取所有checkbox項(xiàng)
        if(e.target.checked){ // 判定全選checkbox的勾選狀態(tài)
          for(var i=0;i<checkObj.length;i++){
            if(!checkObj[i].checked){ // 將未勾選的checkbox選項(xiàng)push到綁定數(shù)組中
              this.checkData.push(checkObj[i].value);
            }
          }
        }else { // 如果是去掉全選則清空checkbox選項(xiàng)綁定數(shù)組
          this.checkData = [];
        }
      }
    }
  });
</script>

利用vue的雙向數(shù)據(jù)綁定v-model命令,當(dāng)勾選時(shí),checkbox的value值會(huì)自動(dòng)push到所綁定的數(shù)組checkData中去,省去了不少對(duì)dom的操作。

如果是固定選項(xiàng)這樣是可以實(shí)現(xiàn)的,但是這種方法有一些弊端,雙向綁定數(shù)組數(shù)據(jù)是寫死的,不太靈活,如果增加了checkbox選項(xiàng),要更改wach里綁定數(shù)組的長(zhǎng)度判斷。

有時(shí)候checkbox選項(xiàng)也是后臺(tái)動(dòng)態(tài)獲取過來的,這樣也靈活一些。

例如后臺(tái)數(shù)據(jù)是這樣的:

  ajaxData: [{
    name: 'a',
    value: 'apple'
  },{
    name: 'b',
    value: 'banana'
  },{
    name: 'c',
    value: 'orange'
  }]

需要先動(dòng)態(tài)渲染checkbox選項(xiàng),在進(jìn)行數(shù)據(jù)綁定。

<div id="app">
  <div class="checkbox">
    <label for="quan">
      <!-- 這里的 $event 是將當(dāng)前對(duì)象傳入進(jìn)去,具體詳情請(qǐng)參照vue官方文檔 -->
      <input id="quan" type="checkbox" @click="checkAll($event)"> 全選
    </label>
    <label v-for="item in ajaxData">
      <!-- v-model 雙向數(shù)據(jù)綁定命令 -->
      <input class="checkItem" type="checkbox" :value="item.value" v-model="checkData"> {{item.name}}
    </label>
  </div>
</div>
<script>
  new Vue({
    el: '#app',
    data(){
      return {
        ajaxData: [{ // 后臺(tái)請(qǐng)求過來的數(shù)據(jù)
          name: '選項(xiàng)1',
          value: 'apple'
        },{
          name: '選項(xiàng)2',
          value: 'banana'
        },{
          name: '選項(xiàng)3',
          value: 'orange'
        }],
        checkData: [] // 雙向數(shù)據(jù)綁定的數(shù)組
      }
    },
    watch: {
      checkData: { // 監(jiān)視雙向綁定的數(shù)組變化
        handler(){
          if(this.checkData.length == this.ajaxData.length){
            document.querySelector('#quan').checked = true;
          }else {
            document.querySelector('#quan').checked = false;
          }
        },
        deep: true
      }
    },
    methods: {
      checkAll(e){ // 點(diǎn)擊全選事件
        if(e.target.checked){
          this.ajaxData.forEach((el,i)=>{
            // 數(shù)組里沒有這一個(gè)value才push,防止重復(fù)push
            if(this.checkData.indexOf(el.value) == '-1'){ 
              this.checkData.push(el.value);
            }
          });
        }else { // 全不選選則清空綁定的數(shù)組
          this.checkData = [];
        }
      }
    }
  });
</script>

方法并不是最優(yōu)的寫法,也存在一些弊端,歡迎各位指點(diǎn)迷津,一起探討。

github地址:https://github.com/zhangqian00/

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue 使用iView組件中的Table實(shí)現(xiàn)定時(shí)自動(dòng)滾動(dòng)效果

    vue 使用iView組件中的Table實(shí)現(xiàn)定時(shí)自動(dòng)滾動(dòng)效果

    要在css中設(shè)置table的高度,使數(shù)據(jù)過多時(shí)出現(xiàn)滾動(dòng)條,將縱向設(shè)置為overflow-y: auto;橫向設(shè)置隱藏 overflow-x: hidden,接下來通過本文介紹vue使用iView組件中的Table實(shí)現(xiàn)定時(shí)自動(dòng)滾動(dòng)效果,需要的朋友可以參考下
    2024-05-05
  • Vue 可拖拽組件Vue Smooth DnD的使用詳解

    Vue 可拖拽組件Vue Smooth DnD的使用詳解

    最近需要有個(gè)拖拽列表的需求,發(fā)現(xiàn)一個(gè)簡(jiǎn)單好用的 Vue 可拖拽組件,本文主要介紹了可拖拽組件Vue Smooth DnD的使用,感興趣的可以了解一下
    2021-07-07
  • 在vue中v-bind使用三目運(yùn)算符綁定class的實(shí)例

    在vue中v-bind使用三目運(yùn)算符綁定class的實(shí)例

    今天小編就為大家分享一篇在vue中v-bind使用三目運(yùn)算符綁定class的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 在vue中created、mounted等方法使用小結(jié)

    在vue中created、mounted等方法使用小結(jié)

    這篇文章主要介紹了在vue中created、mounted等方法使用小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue 使用vant插件做tabs切換和無限加載功能的實(shí)現(xiàn)

    vue 使用vant插件做tabs切換和無限加載功能的實(shí)現(xiàn)

    這篇文章主要介紹了vue 使用vant插件做tabs切換和無限加載功能的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Vue3初始化如何調(diào)用函數(shù)

    Vue3初始化如何調(diào)用函數(shù)

    這篇文章主要介紹了Vue3初始化如何調(diào)用函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 怎樣查看vue-cli的安裝位置

    怎樣查看vue-cli的安裝位置

    這篇文章主要介紹了怎樣查看vue-cli的安裝位置問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue3中使用vuedraggable實(shí)現(xiàn)拖拽el-tree數(shù)據(jù)分組功能

    vue3中使用vuedraggable實(shí)現(xiàn)拖拽el-tree數(shù)據(jù)分組功能

    這篇文章主要介紹了vue3中使用vuedraggable實(shí)現(xiàn)拖拽el-tree數(shù)據(jù)分組功能,可以實(shí)現(xiàn)單個(gè)拖拽、雙擊添加、按住ctrl鍵實(shí)現(xiàn)多個(gè)添加,或者按住shift鍵實(shí)現(xiàn)范圍添加,添加到框中的數(shù)據(jù),還能拖拽排序,需要的朋友可以參考下
    2024-02-02
  • Vue數(shù)據(jù)更新視圖未更新的幾種解決方案

    Vue數(shù)據(jù)更新視圖未更新的幾種解決方案

    本文主要介紹在vue項(xiàng)目中,遇到數(shù)據(jù)更新但視圖不更新的情況時(shí),無法使用watch監(jiān)聽、無法使用this.$set方法,同時(shí)使用this.$forceUpdate()無效時(shí),所使用的解決方案,需要的朋友可以參考下
    2024-02-02
  • Vue使用視頻作為網(wǎng)頁(yè)背景的實(shí)現(xiàn)指南

    Vue使用視頻作為網(wǎng)頁(yè)背景的實(shí)現(xiàn)指南

    在現(xiàn)代網(wǎng)頁(yè)設(shè)計(jì)中,視頻背景逐漸成為一種流行的設(shè)計(jì)趨勢(shì),它不僅能夠提升網(wǎng)頁(yè)的動(dòng)態(tài)效果,還可以在視覺上抓住用戶的注意力,本文將詳細(xì)講解如何在頁(yè)面中使用視頻作為背景,并確保內(nèi)容可見、頁(yè)面元素布局合理,需要的朋友可以參考下
    2024-10-10

最新評(píng)論