最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

例如下面這個簡單的demo


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

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

vue數(shù)據(jù)驅動dom實現(xiàn)功能

<div class="checkbox">
  <label for="quan">
    <!-- 這里的 $event 是將當前對象傳入進去,具體詳情請參照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){ // 點擊全選事件函數(shù)
        var checkObj = document.querySelectorAll('.checkItem'); // 獲取所有checkbox項
        if(e.target.checked){ // 判定全選checkbox的勾選狀態(tài)
          for(var i=0;i<checkObj.length;i++){
            if(!checkObj[i].checked){ // 將未勾選的checkbox選項push到綁定數(shù)組中
              this.checkData.push(checkObj[i].value);
            }
          }
        }else { // 如果是去掉全選則清空checkbox選項綁定數(shù)組
          this.checkData = [];
        }
      }
    }
  });
</script>

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

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

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

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

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

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

<div id="app">
  <div class="checkbox">
    <label for="quan">
      <!-- 這里的 $event 是將當前對象傳入進去,具體詳情請參照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: [{ // 后臺請求過來的數(shù)據(jù)
          name: '選項1',
          value: 'apple'
        },{
          name: '選項2',
          value: 'banana'
        },{
          name: '選項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){ // 點擊全選事件
        if(e.target.checked){
          this.ajaxData.forEach((el,i)=>{
            // 數(shù)組里沒有這一個value才push,防止重復push
            if(this.checkData.indexOf(el.value) == '-1'){ 
              this.checkData.push(el.value);
            }
          });
        }else { // 全不選選則清空綁定的數(shù)組
          this.checkData = [];
        }
      }
    }
  });
</script>

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Vue中使用?Aplayer?和?Metingjs?添加音樂插件的方式

    Vue中使用?Aplayer?和?Metingjs?添加音樂插件的方式

    這篇文章主要介紹了Vue中使用?Aplayer?和?Metingjs?添加音樂插件,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 3種vue路由傳參的基本模式

    3種vue路由傳參的基本模式

    這篇文章主要為大家詳細介紹了vue路由傳參的3種基本模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Vue3處理大數(shù)據(jù)量渲染和優(yōu)化的方法小結

    Vue3處理大數(shù)據(jù)量渲染和優(yōu)化的方法小結

    在現(xiàn)代Web應用中,隨著用戶數(shù)據(jù)和交互的復雜性增加,如何高效地處理大數(shù)據(jù)量渲染成為了前端開發(fā)的重要環(huán)節(jié),本文將以Vue 3為例,探討如何優(yōu)化大數(shù)據(jù)量渲染,提升應用性能,需要的朋友可以參考下
    2024-07-07
  • vue + echarts實現(xiàn)中國省份地圖點擊聯(lián)動

    vue + echarts實現(xiàn)中國省份地圖點擊聯(lián)動

    這篇文章主要介紹了vue + echarts實現(xiàn)中國地圖省份點擊聯(lián)動,需要的朋友可以參考下
    2022-04-04
  • vue實現(xiàn)購物車全部功能的簡單方法

    vue實現(xiàn)購物車全部功能的簡單方法

    vue是前端輕量級MVVM框架,入門門檻相對較低,今天用Vue做一個購物車實例,所以下面這篇文章主要給大家介紹了關于vue實現(xiàn)購物車全部功能的簡單方法,需要的朋友可以參考下
    2021-07-07
  • Vue指令之v-for的使用說明

    Vue指令之v-for的使用說明

    這篇文章主要介紹了Vue指令之v-for的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue項目中進行svg組件封裝及配置方法步驟

    vue項目中進行svg組件封裝及配置方法步驟

    本文主要介紹了vue項目中進行svg組件封裝及配置方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 基于Vue實例對象的數(shù)據(jù)選項

    基于Vue實例對象的數(shù)據(jù)選項

    下面小編就為大家?guī)硪黄赩ue實例對象的數(shù)據(jù)選項。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Vue?Router路由hash模式與history模式詳細介紹

    Vue?Router路由hash模式與history模式詳細介紹

    Vue?Router是Vue.js官方的路由管理器。它和Vue.js的核心深度集成,讓構建單頁面應用變得易如反掌。路由實際上就是可以理解為指向,就是我在頁面上點擊一個按鈕需要跳轉到對應的頁面,這就是路由跳轉
    2022-08-08
  • 一文詳細分析Vue3中的emit用法(子傳父)

    一文詳細分析Vue3中的emit用法(子傳父)

    Emit是Vue3中另一種常見的組件間傳值方式,它通過在子組件中觸發(fā)事件并將數(shù)據(jù)通過事件參數(shù)傳遞給父組件來實現(xiàn)數(shù)據(jù)傳遞,這篇文章主要給大家介紹了關于詳細分析Vue3中emit用法(子傳父)的相關資料,需要的朋友可以參考下
    2024-05-05

最新評論

永寿县| 英德市| 铜鼓县| 平谷区| 石屏县| 临潭县| 双城市| 天峨县| 鄯善县| 白玉县| 会泽县| 浮梁县| 乐山市| 大名县| 罗山县| 吉水县| 织金县| 夹江县| 安图县| 上思县| 宝丰县| 扶沟县| 大新县| 刚察县| 乃东县| 平凉市| 远安县| 三都| 额济纳旗| 扎囊县| 瑞昌市| 元氏县| 塘沽区| 象州县| 惠来县| 玉树县| 安丘市| 修水县| 陆丰市| 香格里拉县| 宁德市|