ホームページ ウェブフロントエンド jsチュートリアル Vue は完全選択と逆選択関数を作成します

Vue は完全選択と逆選択関数を作成します

May 08, 2018 am 09:53 AM
すべて選択 関数

今回は、Vue での全選択と選択の反転の機能について説明します。Vue での全選択と選択の反転の方法についての注意点について、実際のケースを見てみましょう。

全選択機能はフロントエンド開発においては非常に一般的な機能と言えますが、以前はプロジェクト開発では主にjQueryが使用されていました。最近、私は vue フロントエンド フレームワークを使用して以前のプロジェクトをリファクタリングしていました。 jQuery から Vue への移行は、主に DOM を直接操作するという当初の考え方を、データを使用して操作するという Vue フレームワークの中心的な考え方の変更です。考えることで機能が自然と分かりやすくなります。

例えば、以下の簡単なデモ

では、jQueryの考え方に従って行うと、全選択チェックボックスと全チェックボックス項目を選択し、選択したイベントをそれぞれ登録し、選択されたステータスを使用して、対応するチェックボックスのステータスを設定します。これには多くの dom 操作が含まれます。

この機能を実現するための vue データ駆動型 dom のアイデアを見てみましょう。

vue のデータ駆動型 dom 実装関数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

<p class="checkbox">

  <label for="quan">

    <!-- 这里的 $event 是将当前对象传入进去,具体详情请参照vue官方文档 -->

    <input id="quan" type="checkbox" @click="checkAll($event)"> 全选

  </label>

  <label>

    <!-- v-model 双向数据绑定命令 -->

    <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>

</p>

<script>

  new Vue({

    el: '#app',

    data(){

      return {

        checkData: [] // 双向绑定checkbox数据数组

      }

    },

    watch: { // 监视双向绑定的数据数组

      checkData: {

        handler(){ // 数据数组有变化将触发此函数

          if(this.checkData.length == 3){

            document.querySelector('#quan').checked = true;

          }else {

            document.querySelector('#quan').checked = false;

          }

        },

        deep: true // 深度监视

      }

    },

    methods: {

      checkAll(e){ // 点击全选事件函数

        var checkObj = document.querySelectorAll('.checkItem'); // 获取所有checkbox项

        if(e.target.checked){ // 判定全选checkbox的勾选状态

          for(var i=0;i<checkObj.length;i++){

            if(!checkObj[i].checked){ // 将未勾选的checkbox选项push到绑定数组中

              this.checkData.push(checkObj[i].value);

            }

          }

        }else { // 如果是去掉全选则清空checkbox选项绑定数组

          this.checkData = [];

        }

      }

    }

  });

</script>

ログイン後にコピー

vue の双方向データバインディング v-model コマンドを使用すると、チェックすると、チェックボックスの値がバインドされた配列 checkData に自動的にプッシュされ、大量の実装が不要になりますドムの作戦。

固定オプションであればこれを実現できますが、この方法にはいくつかの欠点があります。チェックボックスオプションを追加すると、双方向バインディング配列データがあまり柔軟ではなくなります。 wach の配列を変更する必要があります。

場合によっては、チェックボックスのオプションがバックグラウンドから動的に取得されるため、より柔軟になります。

たとえば、バックグラウンド データは次のようなものです:

1

2

3

4

5

6

7

8

9

10

  ajaxData: [{

    name: 'a',

    value: 'apple'

  },{

    name: 'b',

    value: 'banana'

  },{

    name: 'c',

    value: 'orange'

  }]

ログイン後にコピー

まずチェックボックス オプションを動的にレンダリングしてから、データ バインディングを実行する必要があります。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

<p id="app">

  <p class="checkbox">

    <label for="quan">

      <!-- 这里的 $event 是将当前对象传入进去,具体详情请参照vue官方文档 -->

      <input id="quan" type="checkbox" @click="checkAll($event)"> 全选

    </label>

    <label v-for="item in ajaxData">

      <!-- v-model 双向数据绑定命令 -->

      <input class="checkItem" type="checkbox" :value="item.value" v-model="checkData"> {{item.name}}

    </label>

  </p>

</p>

<script>

  new Vue({

    el: '#app',

    data(){

      return {

        ajaxData: [{ // 后台请求过来的数据

          name: '选项1',

          value: 'apple'

        },{

          name: '选项2',

          value: 'banana'

        },{

          name: '选项3',

          value: 'orange'

        }],

        checkData: [] // 双向数据绑定的数组

      }

    },

    watch: {

      checkData: { // 监视双向绑定的数组变化

        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)=>{

            // 数组里没有这一个value才push,防止重复push

            if(this.checkData.indexOf(el.value) == '-1'){ 

              this.checkData.push(el.value);

            }

          });

        }else // 全不选选则清空绑定的数组

          this.checkData = [];

        }

      }

    }

  });

</script>

ログイン後にコピー

この方法は最適な書き方ではありませんし、デメリットもいくつかありますので、アドバイスや一緒に議論していただければ幸いです。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

vue親コンポーネントがサブコンポーネントを呼び出す実際のケース

JSでのファイルドラッグ手順の詳細な説明(コード付き)

以上がVue は完全選択と逆選択関数を作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Doubaoアプリにはどのような機能がありますか? Doubaoアプリにはどのような機能がありますか? Mar 01, 2024 pm 10:04 PM

Doubaoアプリにはどのような機能がありますか?

vivox100sとx100の違い:性能比較と機能分析 vivox100sとx100の違い:性能比較と機能分析 Mar 23, 2024 pm 10:27 PM

vivox100sとx100の違い:性能比較と機能分析

ディスカスとは何ですか? Discuzの定義と機能紹介 ディスカスとは何ですか? Discuzの定義と機能紹介 Mar 03, 2024 am 10:33 AM

ディスカスとは何ですか? Discuzの定義と機能紹介

JPAとMyBatisの機能・性能の比較分析 JPAとMyBatisの機能・性能の比較分析 Feb 19, 2024 pm 05:43 PM

JPAとMyBatisの機能・性能の比較分析

セルフメディアとは一体何でしょうか?その主な特徴と機能は何ですか? セルフメディアとは一体何でしょうか?その主な特徴と機能は何ですか? Mar 21, 2024 pm 08:21 PM

セルフメディアとは一体何でしょうか?その主な特徴と機能は何ですか?

PHP のヒント: 前のページに戻る関数をすばやく実装する PHP のヒント: 前のページに戻る関数をすばやく実装する Mar 09, 2024 am 08:21 AM

PHP のヒント: 前のページに戻る関数をすばやく実装する

Bluetooth アダプターは何に使用されますか? Bluetooth アダプターは何に使用されますか? Feb 19, 2024 pm 05:22 PM

Bluetooth アダプターは何に使用されますか?

小紅書アカウント管理ソフトウェアの機能は何ですか?小紅書アカウントを操作するにはどうすればよいですか? 小紅書アカウント管理ソフトウェアの機能は何ですか?小紅書アカウントを操作するにはどうすればよいですか? Mar 21, 2024 pm 04:16 PM

小紅書アカウント管理ソフトウェアの機能は何ですか?小紅書アカウントを操作するにはどうすればよいですか?

See all articles