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 スティッキーフッター実装コード

推薦する

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例サーバー開発を行う際には、...

JS オブジェクト配列の重複排除のための 3 つの方法の例と比較

目次1. 重複排除前後のデータの比較2. 使い方1. フィルターとマップを使用する2. 削減を使用す...

TypeScript の Enum が問題となる理由

目次どうしたの?いつ使うか列挙の数を制御するビット値コントロールインデックス非数値列挙結論はType...

CSS3のtext-fill-colorプロパティの詳細な説明

text-fill-color とは何を意味しますか?文字通りの意味から言えば、「テキストの塗りつぶ...

MySQL 5.7.13 winx64 のインストールと設定方法のグラフィック チュートリアル (win10)

この記事では、参考までにMySQL 5.7.13 winx64のインストールと設定方法のグラフィック...

Vueはグラフィック検証コードを実装する

この記事の例では、グラフィック検証コードを実装するためのVueの具体的なコードを参考までに共有してい...

MySQLのスイッチングデータ保存ディレクトリの実装方法

MySQLのスイッチングデータ保存ディレクトリの実装方法今日、仕事中に、mysql が保存されている...

HTMLのフォントがline-heightを指定しても垂直方向に中央揃えできない問題の解決方法を詳しく説明します

による写真に示されている効果を例に挙げてみましょう。明らかに、「次へ」というテキストを水平方向だけで...

DockerのIDEA構成プロセス

IDEA は Java で最も一般的に使用されている開発ツールであり、Docker は最も人気のある...

MySQL マスター スレーブ データベースが同期されない問題を解決する 2 つの方法

目次MySQL マスター スレーブ データベースが同期されない問題を解決する 2 つの方法1. 非同...

MySQL スライディング集計/年初来集計の原理と使用例の分析

この記事では、例を使用して、MySQL スライディング集計/年初来集計の原理と使用方法を説明します。...

MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明

遅いクエリをチェックすると、時間が正しくなく、システム時間とちょうど 8 時間異なっていることがわか...

Docker バインディング固定 IP/クロスホストコンテナ相互アクセス操作

序文これまでは、パイプワークで割り当てた静的 IP は一時的なものであり、再起動すると無効になってい...

jQueryはシンプルなポップアップウィンドウ効果を実装します

この記事では、簡単なポップアップウィンドウ効果を実現するためのjQueryの具体的なコードを参考まで...

vue-pdf はオンラインファイルプレビューを実現します

この記事では、参考までに、ファイルのオンラインプレビューを実現するためのvue-pdfの具体的なコー...