Vueスロットの使用の詳細

Vueスロットの使用の詳細

1. スロットを使用する理由

1.1 スロット

  • コンピュータの USB スロットや電源タップの電源スロットなど、生活のさまざまな場所にスロットがあります。
  • スロットの目的は、当社のオリジナル機器をより拡張可能にすることです
  • たとえば、USB フラッシュドライブ、携帯電話、マウス、キーボードなどをコンピューターのUSBに挿入できます。

1.2 コンポーネントのスロット

  • コンポーネントスロットは、コンポーネントの拡張性を高めるためにも役立ちます。
  • コンポーネント内に何を表示するかをユーザーが決められるようにする

1.3 例

  • モバイル開発では、ほぼすべてのページにナビゲーションバーがあります
  • ナビゲーションバーをプラグインにパッケージ化する必要がある
  • このコンポーネントを作成したら、複数のページで再利用できます。

2. このようなコンポーネントをカプセル化する方法(スロット)

  • カプセル化する最良の方法は、共通部分をコンポーネントに抽出し、異なる部分をスロットとして公開することです。
  • スロットを予約したら、ユーザーが自分のニーズに応じてスロットに何を挿入するかを決定できるようにします。
  • 検索ボックス、テキスト、またはボタンです。決定するのはスケジューラ次第です。

3. スロットケース

<div id="アプリ">
  <cpn><button>ボタン</button></cpn>
  <cpn><p>こんにちは世界</p></cpn>
  <cpn><p>666</p></cpn>
</div>
<テンプレートid="cpn">
  <div>
    <h2>私はコンポーネントです</h2>
    // このスロットはユーザーが <slot></slot> に入力するために予約されています
  </div>
</テンプレート>
<script src="../js/vue.js"></script>
<スクリプト>
  constアプリ = 新しいVue({
    el: "#app",
    コンポーネント:
      "cpn": {
        テンプレート: `#cpn`,
      }
    }
  })
</スクリプト>

上記のコードは次のことを行います。

  • 1. サブコンポーネントcpnを定義し、サブコンポーネント内のスロットを予約し、スロットの内容はユーザーが入力します。
  • 2. 親コンポーネントは子コンポーネントを 3 回使用し、3 つの子コンポーネントはスロットに異なるコンテンツを入力します。

最終的な表示効果は次のようになります。

4. スロットのデフォルト値

このコンポーネントを頻繁に使用する必要があり、コンポーネントによって予約されたスロットのほとんどが戻るボタンで埋められ、他のボタンで埋められているのはほんのわずかである場合、この場合はスロットのデフォルト値を設定できます。

<div id="アプリ">
  <cpn></cpn>
  <cpn></cpn>
  <cpn></cpn>
</div>
<テンプレートid="cpn">
  <div>
    <slot><button>戻る</button></slot>
  </div>
</テンプレート>

子コンポーネントに戻るボタンのデフォルト値を持つスロットを設定します。親コンポーネントが使用時に何も入力されていない場合、デフォルトは戻るボタンになります。

5. 名前付きスロット

場合によっては、複数のスロットが必要になることがあります。たとえば、次のテンプレートを持つコンポーネントの場合:

<テンプレートid="cpn">
  <div>
    <span>ヘッダー</span></slot>
    <span>中央</span></slot>
    <span>フッター</span></slot>
  </div>
</テンプレート>


コンポーネント内に3つのスロットを予約していますが、ここでは3つの名前を指定しています。後続の親コンポーネントはv-slotを使用してname属性を指定した後、次のコードのように独自のコンテンツを埋めることができます。

<div id="アプリ">
  <cpn>
    <テンプレート v-slot:header>
      <p>ヘッダー</p>
    </テンプレート>
    <テンプレート v-slot:footer>
      <p>フッター</p>
    </テンプレート>
  </cpn>
</div>

cpnコンポーネントを使用し、スロットname属性をheaderfooterのコンテンツとして指定します。指定後、入力したコンテンツがデフォルトのコンテンツに置き換えられます。

注:ここでの構文形式は固定されており、テンプレート タグを使用する場合は v-slot: スロット名をバインドする必要があります。

6. コンパイル範囲

外部からコンポーネントに渡された変数は、後でスロットを使用するときには使用できません。

<div id="アプリ">
  <cpn v-show="isShow"></cpn>
</div>
<テンプレートid="cpn">
  <p>こんにちは</p>
</テンプレート>
<script src="../js/vue.js"></script>
<スクリプト>
  constアプリ = 新しいVue({
    el: "#app",
    データ: {
      isShow: 真
    },
    コンポーネント:
      "cpn": {
        テンプレート: `#cpn`,
        データ(){
          戻る {
            isShow: 偽
          }
        }
      }
    }
  })
</スクリプト>

上記では、属性isShowを持つサブコンポーネントcpnを定義しました。属性isShowは、 appインスタンスでも定義されています。最後に、サブコンポーネントcpnを使用する場合は、 v- show使用されます。値がtrueの場合は表示され、値がfalseの場合は表示されません。
質問: v-showisShowの値はインスタンスでは true ですか、それとも子コンポーネントでは false ですか?
回答:そうです。アプリ インスタンスのスコープ内で使用しているため、 isShowインスタンス内のdataからそれを探します。cpn サブcpnにバインドしていますが、ここでは cpn を通常のタグとして扱うだけで済みますisShowの値をfalseたい場合は、サブコンポーネントのtemplate<p v-show="isShow">hello</p>
使用するだけで済みます。 <p v-show="isShow">hello</p>

7. スコープ付きスロット

デフォルトでは、スロット内のコードはグローバルVue内のプロパティのみを使用できます。カスタムコンポーネントでプロパティを使用する場合は、 slotを定義するときにv-bindを使用してバインドする必要があります。

<div id="アプリ">
  <cpn>
    <テンプレート v-slot:default="スロット">
      {{slot.data.firstName}}
    </テンプレート>
  </cpn>
</div>
<テンプレートid="cpn">
  <div>
    <スロット:data="ユーザー">
      {{user.lastname}}
    </スロット>
  </div>
</テンプレート>
<script src="../js/vue.js"></script>
<スクリプト>
  constアプリ = 新しいVue({
    el: "#app",
    コンポーネント:
      "cpn": {
        テンプレート: `#cpn`,
        データ(){
          戻る {
            「ユーザー」: {
              "firstName": "甲",
              "姓": "貝虫"
            }
          }
        }
      }
    }
  })
</スクリプト>

上記のコードは次のことを行います。

  • 1. サブコンポーネントcpnを定義し、サブコンポーネント内のuserを定義します。
  • 2. 属性dataサブコンポーネントcpnテンプレートのスロットにバインドされ、スロットのデフォルト値はuser.lastname
    です。 user.lastname
  • 3. サブコンポーネントはhtmlで使用され、スロットPropオブジェクトはv-slotを使用してバインドされるため、サブコンポーネント内のデータはオブジェクト名を通じてアクセスできます。サブコンポーネントにバインドされているプロパティ名 ( slot.data )

Vue スロットの使い方についての詳細はこれで終わりです。Vue スロットの使い方についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vuejs 11番目のコンポーネントのスロットコンテンツ配布例の詳細説明
  • Vue のスロットを使用して親コンポーネントのコンテンツを配布し、再利用性が高く柔軟性の高いコンポーネントを実現します (推奨)
  • vue3.0 でスロット コンポーネントを使用してボタンをカプセル化する

<<:  ウェブページ作成時に標準 HTML コードを使用する際のポイント

>>:  CSS スティッキーフッター実装コード

推薦する

MIME TYPEとは?MIME-Typesタイプコレクション

MIME タイプとは何ですか? 1. まず、ブラウザがコンテンツを処理する方法を理解する必要がありま...

Linux と Windows でスケジュールされたタスクを設定する方法

目次リナックス1. crontabの基本的な使い方2. ログを有効にする3. スケジュールされたタス...

JavaScript でドラッグ スライダー パズルの検証機能を実装します (html5、canvas)

導入:スライダー ドラッグ検証は現在、多くの場所で使用されています。週末に 1 つ作成しようと思い、...

MySQL マスタースレーブ同期、トランザクションロールバックの実装原理

ビンログBinLog は、データベース テーブル構造の変更 (テーブルの作成、変更など) とテーブル...

mysql zipファイルのインストールチュートリアル

この記事では、参考までにMySQL zipファイルをインストールする具体的な方法を紹介します。具体的...

Windows Server win2003、win2008R2、win2012、win2016、win2019 システム バージョン間の違い

最近、Microsoft は 2019 サーバー システムをリリースしました。一般的に、Micros...

シンプルな虫眼鏡効果を実現するJavaScript

大きな箱の中に写真があります。マウスをその上に置くと、半透明のマスク レイヤーが表示されます。マウス...

vscodeで保存した後のHTML自動フォーマットの問題を解決する

vsCode のバージョンは最近更新され、現在のバージョン番号は 1.43 です。実際、vsCode...

reduxの動作原理と使い方の説明

目次1. redux とは何ですか? 2. 還元の原則3. redux の使い方は? (1)redu...

HTML ハイパーリンクの詳細な説明

ハイパーリンクハイパーリンクは、Web サイト上のすべてのページがハイパーリンクで接続され、ページ間...

ネイティブ js はフォームの定期的な検証を実装します (検証後にのみ送信)

以下の機能が実装されています。 1. ユーザー名: onfouc は msg ルールを表示します。o...

HTML の順序付きリスト、順序なしリスト、定義リストに関する簡単な説明

順序付きリストXML/HTML コードコンテンツをクリップボードにコピー<オルタイプ= &qu...

Linux でパスワードの有効期限を表示および設定する方法

適切な設定を行うことで、Linux ユーザーにパスワードを定期的に変更させることができます。パスワー...

MySQLの行ロックとテーブルロックの意味と違いの詳細な説明

1. はじめに行ロックとテーブルロックの違いは面接で頻繁に出てくるはずです。MySQL のロックにつ...