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で共存します

推薦する

CSSは2つの要素をブレンドする効果(スティッキー効果)を実現します。

数年前、Taobaoのモバイル版の左下隅に面白い丸いボタンがあったことを覚えています。それをクリック...

CSSはフロントエンドの画像変形の問題を完璧に解決します

Toutiao IT School で、CSS がフロントエンドの画像変形の問題を完璧に解決するとい...

Nginx転送マッチングルールの実装

1. 正規表現マッチング大文字と小文字を区別するマッチングの場合 ~ ~*は大文字と小文字を区別しな...

JavaScript プロトタイプとプロトタイプチェーンの詳細

目次1. プロトタイプ(明示的なプロトタイプ) 2. __proto__ (暗黙のプロトタイプ) 3...

JS のあらゆる場所で絶対等価演算子の使用をやめる

目次概要1. NULL値のテスト2. ユーザー入力を読み取る導入事実の根源はどこにあるのでしょうか?...

入力ボックスのプレースホルダーテキストのデフォルトの色を変更する -webkit-input-placeholder メソッド

HTML5 では、入力用のネイティブ プレースホルダー属性が追加されており、これは高度なブラウザでサ...

Ubuntu 18.04 のすべての Python ライブラリを一度にアップグレードする方法

ピップとは何かpip は、Python パッケージの検索、ダウンロード、インストール、アンインストー...

Zabbix上のすべてのホストのIPとホスト名を取得する

ザビックスZabbix ([`zæbiks]) は、WEB インターフェースに基づいて分散システム監...

vue3.0+echarts は 3 次元の縦棒グラフを実現します

序文: Vue3.0はechartsの3次元縦棒グラフを実装します結果: 実装手順: 1. echa...

nginx ウェブサイト サービスのアンチホットリンクを設定する方法 (推奨)

1. ホットリンクの原則1.1 Webページの準備Web ソース ホスト (192.168.153...

Docker チュートリアル: コンテナの使用 (簡単な例)

Docker を初めて使用する場合は、コンテナの管理を始めるために習得する必要がある基本的なコマン...

Zabbix でフィルターを使用して監視を実装する方法

最近、監視機器の作業をしていたとき、ポートがダウンしているというアラームが常に出ていました。データを...

Dockerカスタムネットワークの詳細な紹介

目次Dockerカスタムネットワーク1. カスタムネットワークの紹介2. カスタムネットワークを作成...

IE6 での PNG アルファ透明度 (完全コレクション)

IE6 は PNG の透明度をサポートしていないと多くの人が言っています。実際、IE は 100%...

dockerでpdflatex環境を設定する方法

技術的背景Latex は文書作成、特に記事作成には欠かせないツールであり、必須のテキスト組版ツールで...