Vue.js スロットにおけるスコープ付きスロットの使用法の詳細な説明

Vue.js スロットにおけるスコープ付きスロットの使用法の詳細な説明

スロットなし

<div id="アプリ">
    <子供>
        <span>1111</span>    
    </子>
</div>


<スクリプト>
    // 子コンポーネントを登録する Vue.component("child", {
        テンプレート: "<div>これは div タグです</div>"
    });

    // 親コンポーネントを初期化する new Vue({
        el: "#app"
    });
</スクリプト>

テンプレート内のspan標簽、以下に示すように、「 <div>這是一個div標簽</div> 」に置き換えられます。

ここに写真の説明を記入してください

Vue2.x スロット

スロット付き

簡単に言えば、 slot標簽を使用して、子コンポーネントに表示したい場所に<span>1111</span>を配置できます。以下のように表示されます。

<div id="アプリ">
    <子供>
        <span>1111</span>    
    </子>
</div>


<スクリプト>
    // 子コンポーネントを登録する Vue.component("child", {
        テンプレート: "<div>これは <slot></slot>div タグ</div> です"
    });

    // 親コンポーネントを初期化する new Vue({
        el: "#app"
    });
</スクリプト>

ここに写真の説明を記入してください

複数のタグがある場合でも、それらは一緒に挿入されます。これは、 <slot></slot>タグを、親コンポーネントによって子コンポーネントに配置されたタグに置き換えることと同じです。以下のように表示されます。

<div id="アプリ">
    <子供>
        <span>1111</span>   
        2222年
        <b>3333</b>
    </子>
</div>


<スクリプト>
    // 子コンポーネントを登録する Vue.component("child", {
        テンプレート: "<div>これは <slot></slot>div タグ</div> です"
    });

    // 親コンポーネントを初期化する new Vue({
        el: "#app"
    });
</スクリプト>

ここに写真の説明を記入してください

名前付きスロット

  1. 親コンポーネントは、配布するタグにslot="xxx"属性を追加します。
  2. 対応する配布場所のslot標簽で、サブコンポーネントにname="xxx"属性を追加します。
  3. 次に、対応するラベルが対応する位置に配置されます。以下のように表示されます。
<div id="アプリ">
    <子供>
        <span slot="one">1111</span>
        <i slot="two">2222</i>
        <b スロット="3">3333</b>
    </子>
</div>


<スクリプト>

    // 子コンポーネントを登録する Vue.component("child", {
        テンプレート: `<div>
                        これは <slot name='one'></slot> です
                        1 つの <slot name='two'></slot>
                        分割
                        <スロット名='3'></スロット>
                        タグ </div>`
    });


    // 親コンポーネントを初期化する new Vue({
        el: "#app"
    });
</スクリプト>

ここに写真の説明を記入してください

スロット属性なし

サブコンポーネントタグにスロット属性がない場合、デフォルト値が表示されます。

    <div id="アプリ">
        <子供>
            <!-- <span slot="one">1111</span> -->
            <i slot="two">2222</i>
            <!-- <b slot="three">3333</b> -->
        </子>
    </div>

    <スクリプト>
        // 子コンポーネントを登録する Vue.component("child", {
            テンプレート: `<div>
                            <slot name='one'>誰も</slot>
                            <slot name='two'>いいえ 2</slot>
                            <slot name='three'>3 ではない</slot>
                        </div>`

        });

        // 親コンポーネントを初期化する new Vue({
            el: "#app"
        });
    </スクリプト>

slot="two"は、以下に示すように固定位置に挿入されます。

ここに写真の説明を記入してください

スロットの簡単なサンプルアプリケーション

コンピュータのマザーボード上のさまざまなスロットについて考えてみましょう。CPU 用、グラフィック カード用、メモリ用、ハード ディスク用のスロットがあります。したがって、computer というコンポーネントがあり、そのテンプレートが template であると仮定します。

<本文>
    <div id="アプリ">
        <コンピュータ>
            <div slot="CPU">インテル Core i7</div>
            <div slot="GPU">GTX980Ti</div>
            <div slot="メモリ">キングストン 32G</div>
            <div slot="ハードドライブ">Samsung SSD 1T</div>
        </コンピュータ>
    </div>

    <スクリプト>
        // サブコンポーネントを登録する Vue.component("computer", {
            テンプレート: `<div>
                            <slot name="CPU">ここに CPU を接続します</slot>
                            <slot name="GPU">ここにグラフィック カードを接続します</slot>
                            <slot name="Memory">ここにメモリを挿入します</slot>
                            <slot name="Hard-drive">ここにハードドライブを接続します</slot>
                        </div>`
        });

        // 親コンポーネントを初期化する new Vue({
            el: "#app"
        });
    </スクリプト>
</本文>

ここに写真の説明を記入してください

スコープ付きスロット (2.1.0 の新機能)

スコープ スロットは、すでにレンダリングされた要素を置き換えるための再利用可能なテンプレート (データを渡すことができる) として機能する特別なタイプのスロットです。

  1. 子コンポーネントでは、コンポーネントにプロパティを渡すのと同じように、スロットにデータを渡すだけです。
  2. 親コンポーネントでは、子コンポーネントによって渡されるデータslot-scope="scoped"を通じて取得されます。このデータ オブジェクトのエイリアスはscopedです。これはスコープ付きスロットのテンプレートです。
<div id="アプリ">
    <子供>
    	<!-- 2. スコープが { "myName": "猫老板的豆" } に設定された myName データを受信します -->
        <テンプレート スロット="コンテンツ" スロット スコープ="スコープ指定"> 
            <div>{{ スコープ付き.myName }}</div>
        </テンプレート>
    </子>
</div>

<スクリプト>
	Vue.component('child', {
		データ () {
			戻る {
				私の名前: 「猫のボスの豆」
			}
		},
		テンプレート: `<slot name="content" :myName="myName"></slot>` // 1. myName データを破棄します })
	
	新しいVue({
		el: "#app"
	});
</スクリプト>

Vue3.x スロット

スロット

<!-- 親コンポーネント -->
<テンプレート>
	<子供>
		<!-- Vue2.x の記述 <div slot="parent">
            <div>親コンポーネント</div>
		</div>
		 -->
		<テンプレート v-slot:親>
            <div>親コンポーネント</div>
        </テンプレート>
	</子>
</テンプレート>


<!-- 子コンポーネント -->
<テンプレート>
	<slot name='parent'>子コンポーネント</slot>
</テンプレート>

スコープ付きスロット

Vue2.x では、名前付きスロットとスコープ付きスロットはそれぞれslotslot-scopeを使用して実装されます。Vue3.x では、 slotslot-scopeが組み合わされて一緒に使用されます。

親コンポーネント:

<テンプレート>
	<子供>
		<!-- <テンプレート スロット="コンテンツ" スロット スコープ="スコープ付き"> -->
		<テンプレート v-slot:content="scoped">
			<div>{{scoped.myName}}</div>
		</テンプレート>
	</子>
</テンプレート>

サブコンポーネント:

<テンプレート>
	<スロット名="コンテンツ" :myName="私の名前"></スロット>
</テンプレート>

<スクリプト>

'vue' から { ref } をインポートします
エクスポートデフォルト{
	設定 () {

		let myName = ref("ミスター・キャッツ・ビーン")

		{ myName } を返します
	},
}
</スクリプト>

Vue.js スロットのスコープ付きスロットの詳しい使い方については、これで終わりです。Vue.js スロットのスコープ付きスロットに関するその他のコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue.js 動的コンポーネント分析
  • Vue.js 親子コンポーネント通信の動的バインディングの例
  • Vue.js での動的コンポーネント テンプレートの実装
  • vue.js 動的コンポーネントの詳細な説明
  • フロントエンドアーキテクチャ Vue アーキテクチャ スロット使用チュートリアル
  • Vue2のスロットの基本的な使用仕様
  • Vue のデフォルト スロット、名前付きスロット、スコープ スロットの定義と使用方法
  • vue.js の動的コンポーネントとスロットの使用の概要

<<:  mysqlはタイムゾーン関連の問題を解決します

>>:  CUDA8.0とCUDA9.0はUbuntu16.04で共存します

推薦する

Linux での MySQL 5.7.19 のインストールに関する問題の概要

初めて仮想マシンに MySQL をインストールしたとき、多くの問題が発生しました。ここでそれらを書き...

VMware での Ubuntu Docker のインストール (コンテナ構築)

1. マインドマップ 2. コンテナの構築方法2.1 実験環境の準備(1)環境選択管理ツール: D...

MySQL でテーブル メタデータ ロックを待機する理由と方法

MySQL が alter table などの DDL 操作を実行すると、テーブル メタデータ ロッ...

HTMLプログラミングタグとドキュメント構造の詳細な説明

HTML を使用してコンテンツをマークアップする目的は、Web ページにセマンティクスを与えることで...

Vueデータ変更検出の基本的な実装の簡単な分析

目次1. オブジェクトの変更検出2. オブジェクトに関する質問配列変更検出3.1 背景3.2 実装I...

IE10以下のimgタグ問題の解決方法

問題を見つける以前、簡単なデモを書いたのですが、IE10以下では動作しないことがわかりました。ここに...

HTML テキストエスケープのヒント

今日、CSDN で HTML テキスト エスケープのちょっとしたトリックを見ましたが、とても簡単です...

Navicat for SQLite で中国語データを CSV にインポートする方法

この記事では、参考までに、csv中国語データをNavicat for SQLiteにインポートする具...

Linux manコマンドの具体的な使い方

01. コマンドの概要Linux には充実したヘルプ マニュアルが用意されています。コマンドのパラメ...

MySQL 挿入時間の 8 時間の違いの問題の解決方法

MySQL挿入時の8時間の時差の問題を解決する通常、jdbc の URL にはいくつかのパラメータを...

Docker で Python スクリプトを実行する方法

まず、Docker イメージ用の特定のプロジェクト ディレクトリを作成します。例: mkdir /h...

Mysqlの同時パラメータ調整の詳細な説明

目次クエリキャッシュの最適化概要クエリプロセスクエリキャッシュ構成クエリキャッシュの無効化メモリ管理...

Element UI をインストールして vue3.0 でベクター グラフィックスを使用する方法

ここでは、v3 のインストールと使用にのみ焦点を当てます。v2 について学びたい場合は、公式 Web...

mysql ルートユーザーを認証できず、Navicat リモート認証プロンプト 1044 の問題を解決します

まず解決策を見てみましょう #------------mysql の root ユーザーに権限を付与...

CSS3 を使用して円形スクロール プログレス バー アニメーションを作成する例

テーマ今日は、CSS3 を使用して円形スクロール プログレス バー アニメーションを作成する方法を説...