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

推薦する

vue+element を使用した Google プラグインの開発プロセス全体

シンプルな機能: ブラウザの右上隅にあるプラグイン アイコンをクリックすると小さなポップアップ ウィ...

Vuexはセッションストレージデータを結合して、ページを更新するときにデータが失われる問題を解決します

目次序文1. 理由: 2. 解決策のアイデア: 1. ローカル保存方法: 2. 実装手順: 3. 最...

フロントエンドの状態管理(パート 1)

目次1. フロントエンドの状態管理とは何ですか? 2. ヴュークス3. バス4. ウェブストレージ序...

ボタンのタイプが送信として指定されていません。ボタンをクリックしても、指定された URL にジャンプしません。

現在、プロジェクトの要件により、フォームの送信を制御し、送信前にデータを検証および処理するために j...

iframe に関するいくつかの発見と考察

この物語は、今日の予期せぬ発見から始まります。同社には複数のウェブサイトがある。友達リンクにはお互い...

WeChatアプレットで画像の幅と高さを取得する方法

起源最近、私は要件 A に取り組んでいます。そこには、次のように記述される小さな機能ポイントがありま...

MySQL DATEDIFF 関数を使用して 2 つの日付間の時間間隔を取得する方法

説明する2 つの日付間の時間間隔を返します。文法DateDiff(間隔、日付1、日付2 [、週の最初...

MySQL インデックスの長さ制限の原理の分析

この記事は主に、MySQL インデックスの長さ制限の原理の分析を紹介します。サンプル コードを通じて...

JavaScriptクロージャの原理と機能の詳細な説明

目次導入クロージャの使用カレー作りパブリック変数の実装キャッシュカプセル化(属性のプライベート化)閉...

HTML Web ページにおける URL の表現

HTML では、一般的な URL はさまざまな方法で表現されます。相対 URL:コードをコピーコード...

Bootstrap 3.0 学習ノート グリッドシステム事例

序文前回の記事では、主にグリッドシステムの基本原理を学び、簡単なケースを通してその原理を実践しました...

HTML 名 ID とクラスの違い_PowerNode Java アカデミー

名前タグの名前を指定します。形式 <input type="text" n...

ul リスト タグ デザイン ウェブ ページ 複数列レイアウト

数日前、CSS で 3 列レイアウトを書いていたときに、突然この方法を思いつきました。このアイデアは...

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

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

vue+el-upload は複数ファイルの動的アップロードを実現します

vue+el-upload 複数ファイルの動的アップロード、参考までに具体的な内容は以下のとおりです...