今回は、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: []
}
},
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' );
if (e.target.checked){
for ( var i=0;i<checkObj.length;i++){
if (!checkObj[i].checked){
this.checkData.push(checkObj[i].value);
}
}
} else {
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)=>{
if (this.checkData.indexOf(el.value) == '-1' ){
this.checkData.push(el.value);
}
});
} else {
this.checkData = [];
}
}
}
});
</script>
|
ログイン後にコピー

この方法は最適な書き方ではありませんし、デメリットもいくつかありますので、アドバイスや一緒に議論していただければ幸いです。
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:
vue親コンポーネントがサブコンポーネントを呼び出す実際のケース
JSでのファイルドラッグ手順の詳細な説明(コード付き)
以上がVue は完全選択と逆選択関数を作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。