Vue3.0はチェックボックスコンポーネントのカプセル化を実装します

Vue3.0はチェックボックスコンポーネントのカプセル化を実装します

この記事では、チェックボックスコンポーネントのカプセル化を実装するためのvue3.0の具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

一般的な手順:

  • コンポーネント自体の選択と選択解除の効果を実現する
  • コンポーネントのv-modelディレクティブを実装する
  • @vueuse/core関数の記述に変換
<!-- 基本的なコンポーネント スタイル -->
<テンプレート>
  <div class="xtx-checkbox" @click="changeChecked()">
    <i v-if="チェック済み" class="iconfont icon-checked"></i>
    <i v-else class="iconfont icon-unchecked"></i>
    <span v-if="$slots.default"><スロット /></span>
  </div>
</テンプレート>

<スクリプト>
'vue' から { ref } をインポートします
エクスポートデフォルト{
  名前: 'XtxCheckbox',
  設定 () {
    const チェック済み = ref(false)
    定数changeChecked = () => {
      チェックされた値 = !チェックされた値
    }
    戻り値: {checked, changeChecked}
  }
}
</スクリプト>

<style スコープ lang="less"> 
 // スタイルは適宜変更できます。xtx-checkbox {
  表示: インラインブロック;
  右マージン: 2px;
  .アイコンチェック済み{
    色: @xtxColor;
    ~ スパン {
      色: @xtxColor;
    }
  }
  私 {
    位置: 相対的;
    上: 1px;
  }
  スパン {
    左マージン: 2px;
  }
}
</スタイル>
// 注: グローバルに使用する必要がある場合は、グローバル コンポーネントとして登録する必要があります。
<!-- v-model ディレクティブを実装する -->
...構造<script>を省略する
'vue' から { toRef } をインポートします
エクスポートデフォルト{
  名前: 'XtxCheckbox',
  小道具: {
    modelValue: { // v-modelのデフォルトのバインディング値はmodelValueです
      タイプ: ブール値、
      デフォルト: false
    }
  },
  セットアップ(props、{emit}){
    const checked = toRef(props, 'modelValue') // 受信したブール値を格納するためにcheckedを定義します。const changeChecked = () => {
      emitting('update:modelValue', !checked.value) // チェックボックスをチェックするために親コンポーネントに値を渡します}
    戻り値: {checked, changeChecked}
  }
}
</スクリプト>
...楕円形スタイル
<!-- 基本的な使用方法 -->
<!-- カスタム チェックボックス テスト -->
<xtx-checkbox v-model="checked">カスタムチェックボックス</xtx-checkbox>
<スクリプト>
'vue' から { ref } をインポートします
エクスポートデフォルト{
  名前: 'サブカテゴリ',
  設定 () {
    const チェック済み = ref(true)
    チェック済みを返す
  }
}
</スクリプト> 

<!-- @vueuse/core 関数の記述 -->
<テンプレート>
  <div class="xtx-checkbox" @click='checked=!checked'>
    <i v-if="チェック済み" class="iconfont icon-checked"></i>
    <i v-else class="iconfont icon-unchecked"></i>
    <span>
      <スロット />
    </span>
  </div>
</テンプレート>

<スクリプト>
import { useVModel } from '@vueuse/core' // npm i @vueuse/core または yarn add @vueuse/core が必要です
エクスポートデフォルト{
  名前: 'XtxCheckbox',
  小道具: {
    モデル値: {
      タイプ: ブール値、
      デフォルト: false
    }
  },
  セットアップ(props、{emit}){
    // 親コンポーネントから渡された modelValue の値を取得します。const checked = useVModel(props, 'modelValue', emitting)
    チェック済みを返す
  }
}
</スクリプト>


// 使用方法は上記と同じ <xtx-checkbox v-model="checked">カスタム チェックボックス</xtx-checkbox>
<スクリプト>
'vue' から { ref } をインポートします
エクスポートデフォルト{
  名前: 'サブカテゴリ',
  設定 () {
    const チェック済み = ref(true)
    チェック済みを返す
  }
}
</スクリプト>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue3 コンパイルプロセス - ソースコード分析
  • Vue3における7種類のコンポーネント通信の詳細
  • Vue3カプセル化メッセージメッセージプロンプトインスタンス関数の詳細な説明
  • Vue2とVue3の兄弟コンポーネント通信バスの違いと使い方
  • vue3 を使用してカウント関数コンポーネントのカプセル化例を実装する
  • Vue3.0はドロップダウンメニューのカプセル化を実装します
  • vue3とvue2の利点の比較
  • Vue3とTypeScriptを組み合わせたプロジェクト開発の実践記録
  • Vue3とTypeScriptを組み合わせたプロジェクト開発の実践の概要
  • Vue3 AST パーサー - ソースコード分析

<<:  DockerにNginxをインストールする方法

>>:  MySQL 変数の原理と応用例

推薦する

MySQL バッチ挿入とユニークインデックスの問題に対する解決策

MySQL バッチ挿入の問題プロジェクトを開発しているときに、古いシステムの基本データを事前にインポ...

CSS3+JS による虫眼鏡モードの完璧な実装の詳細説明

約 1 年前、私は「虫眼鏡効果を模倣するいくつかの方法の原理の分析」という記事を書きました。当時、自...

Linux デュアル ネットワーク カード バインディング スクリプト メソッドの例

Linux の操作と構成作業では、デュアル ネットワーク カードのバインディングがよく使用されます。...

uniapp vue および nvue カルーセル コンポーネントのサンプル コード

vueの部分は以下のとおりです。 <テンプレート> <ビュークラス="&...

ディスクを破壊せずに Linux で dd コマンドを使用する方法

故障したストレージ ドライブからデータを救出する場合でも、アーカイブをリモート ストレージにバックア...

vue.jsは画像のURLに従って画像をダウンロードします

最近、フロントエンドの vue.js ドッキング機能モジュールに取り組んでいたとき、画像をダウンロー...

Vue で $attrs と $listeners を使用するチュートリアル

目次導入例要約する導入$属性すべての親コンポーネントのプロパティを継承します (props を通じて...

Centos8 に nginx1.9.1 をインストールする詳細な手順

1.17.9 本当はもっと美味しいNginx のダウンロード アドレス: https://nginx...

テーブルを使用する場合と CSS を使用する場合 (経験の共有)

TW のメインテキスト ページは、以前は小さなモニターと低解像度のユーザーを考慮して幅が 850 ピ...

HTML テーブルタグチュートリアル (46): テーブルフッタータグ

<tfoot> タグは、テーブル フッターのスタイルを定義するために使用されます。基本構...

LinuxシステムでのSystemC環境設定方法

以下はcentos7での設定方法ですsystemc ソース パッケージをダウンロード: System...

Javascriptのクロージャとアプリケーションの詳細な説明

目次序文1. クロージャとは何ですか? 1.1 クロージャは条件コードを満たす1.2 クロージャ生成...

MySQL データベース アーキテクチャの詳細

目次1. MySQL アーキテクチャ2. ネットワーク接続層3. データベースサービス層4. 接続プ...

Dockerが新しいイメージをロードした後にリポジトリとタグ名が両方ともnoneになる問題を解決する

次のコマンドを使用できます: docker tag [イメージID] [名前]:[バージョン]例えば...

Angularコンポーネントのライフサイクルの詳しい説明(パート2)

目次1. ビューフック1. ngAfterViewInit および ngAfterViewCheck...