目次
前の言葉
编译作用域
默认丢弃
匿名slot
具名Slot
コンパイル スコープ
デフォルトでは破棄
匿名スロット
名前付きスロット
作用域插槽

Vue コンテンツ配信スロット

Aug 19, 2017 am 10:13 AM
slot コンテンツ 分布

前の言葉

コンポーネントを構成するには、親コンポーネントのコンテンツと子コンポーネント独自のテンプレートを混合する方法が必要です。このプロセスは コンテンツ配信 (または「トランスクルージョン」) と呼ばれます。 Vue は、生のコンテンツのスロットとして特別な <slot> 要素を使用して、現在のドラフト Web コンポーネント仕様に準拠したコンテンツ配布 API を実装します。この記事では、Vue コンテンツ配布スロットについて詳しく紹介します<slot> 元素作为原始内容的插槽。本文将详细介绍Vue内容分发slot

编译作用域

  在深入内容分发 API 之前,先明确内容在哪个作用域里编译。假定模板为

<child-component>
  {{ message }}
</child-component>
ログイン後にコピー

  message 应该绑定到父组件的数据,还是绑定到子组件的数据?答案是父组件。组件作用域简单地说是:父组件模板的内容在父组件作用域内编译;子组件模板的内容在子组件作用域内编译。

  一个常见错误是试图在父组件模板内将一个指令绑定到子组件的属性/方法:

<!-- 无效 -->
<child-component v-show="someChildProperty"></child-component>
ログイン後にコピー

  假定someChildProperty是子组件的属性,上例不会如预期工作。父组件模板不应该知道子组件的状态

  如果要绑定作用域内的指令到一个组件的根节点,应当在组件自己的模板上做:

Vue.component('child-component', {
  // 有效,因为是在正确的作用域内
  template: '<p v-show="someChildProperty">Child</p>',
  data: function () {
    return {
      someChildProperty: true
    }
  }
})
ログイン後にコピー

  类似地,分发内容是在父作用域内编译

 

默认丢弃

  一般地,如果子组件模板不包含<slot>插口,父组件的内容将会被丢弃

var parentNode = {
  template: `  <p class="parent">
    <p>父组件</p>
    <child>
      <p>测试内容</p>
    </child>
  </p>
  `,
  components: {
    'child': childNode
  },
};
ログイン後にコピー
ログイン後にコピー

<p id="example">
  <parent></parent></p><script src="https://unpkg.com/vue"></script><script>var childNode = {
  template: `  <p class="child">
    <p>子组件</p>
  </p>  `,
};var parentNode = {
  template: `  <p class="parent">
    <p>父组件</p>
    <child>
      <p>测试内容</p>
    </child>
  </p>  `,
  components: {    'child': childNode
  },
};// 创建根实例new Vue({
  el: '#example',
  components: {    'parent': parentNode
  }
})</script>
ログイン後にコピー

  如下图所示,所包含的

测试内容

被丢弃

 

匿名slot

  当子组件模板只有一个没有属性的 slot 时,父组件整个内容片段将插入到 slot 所在的 DOM 位置,并替换掉 slot 标签本身

var childNode = {
  template: `  <p class="child">
    <p>子组件</p>
    <slot></slot>
  </p>
  `,
};
ログイン後にコピー

var parentNode = {
  template: `  <p class="parent">
    <p>父组件</p>
    <child>
      <p>测试内容</p>
    </child>
  </p>
  `,
  components: {
    'child': childNode
  },
};
ログイン後にコピー
ログイン後にコピー

  如果出现多于1个的匿名slot,vue将报错

var childNode = {
  template: `  <p class="child">
    <p>子组件</p>
    <slot></slot>
    <slot></slot>
  </p>
  `,
};
ログイン後にコピー

【默认值】

  最初在 <slot> 标签中的任何内容都被视为备用内容,或者称为默认值。备用内容在子组件的作用域内编译,并且只有在宿主元素为空,且没有要插入的内容时才显示备用内容

  当slot存在默认值,且父元素在中没有要插入的内容时,显示默认值

var childNode = {
  template: `  <p class="child">
    <p>子组件</p>
    <slot><p>我是默认值</p></slot>
  </p>
  `,
};
var parentNode = {
  template: `  <p class="parent">
    <p>父组件</p>
    <child></child>
  </p>
  `,
  components: {
    'child': childNode
  },
};
ログイン後にコピー

  当slot存在默认值,且父元素在中存在要插入的内容时,则显示设置值

var childNode = {
  template: `  <p class="child">
    <p>子组件</p>
    <slot><p>我是默认值</p></slot>
  </p>
  `,
};
var parentNode = {
  template: `  <p class="parent">
    <p>父组件</p>
    <child>
      <p>我是设置值</p>
    </child>
  </p>
  `,
  components: {
    'child': childNode
  },
};
ログイン後にコピー

 

具名Slot

  <slot> 元素可以用一个特殊的属性 name 来配置如何分发内容。多个 slot 可以有不同的名字。具名 slot 将匹配内容片段中有对应 slot

コンパイル スコープ

コンテンツ配布 API について詳しく説明する前に、まずコンテンツがどのスコープでコンパイルされるかを明確にします。テンプレートが

var childNode = {
  template: `  <p class="child">
    <p>子组件</p>
    <slot name="my-header">头部默认值</slot>
    <slot name="my-body">主体默认值</slot>
    <slot name="my-footer">尾部默认值</slot>
  </p>
  `,
};
ログイン後にコピー

であると仮定します。 message は親コンポーネントのデータにバインドされるべきですか、それとも子コンポーネントのデータにバインドされるべきですか?答えは親コンポーネントです。コンポーネント スコープとは、単に、親コンポーネント テンプレートのコンテンツが親コンポーネント スコープでコンパイルされ、子コンポーネント テンプレートのコンテンツが子コンポーネント スコープでコンパイルされることを意味します。

よくある間違いは、親コンポーネントのテンプレート内で子コンポーネントのプロパティ/メソッドにディレクティブをバインドしようとすることです:

var parentNode = {
  template: `  <p class="parent">
    <p>父组件</p>
    <child>
      <p slot="my-header">我是头部</p>
      <p slot="my-footer">我是尾部</p>
    </child>
  </p>
  `,
  components: {
    'child': childNode
  },
};
ログイン後にコピー

someChildProperty が子コンポーネントのプロパティであると仮定すると、上記の例は期待どおりに動作しません。親コンポーネントのテンプレートは、子コンポーネントの状態を認識すべきではありません

スコープ付きディレクティブをコンポーネントのルート ノードにバインドしたい場合は、コンポーネント独自のテンプレートでそれを行う必要があります:

var childNode = {
  template: `  <p class="child">
    <p>子组件</p>
    <slot name="my-body">主体默认值</slot>
    <slot></slot>
  </p>
  `,
};
ログイン後にコピー

同様に、配布コンテンツは親スコープでコンパイル済みです

デフォルトでは破棄

通常、子コンポーネント テンプレートに <slot> ソケットが含まれていない場合、コンテンツは下の図に示すように、<子>に含まれる

testコンテンツ

は破棄されます

匿名スロット

時サブコンポーネント テンプレートには属性のないスロットが 1 つだけあり、親コンポーネントのコンテンツ フラグメント全体がスロットが配置されている DOM の場所に挿入され、スロット タグ自体が置き換えられます

var parentNode = {
  template: `  <p class="parent">
    <p>父组件</p>
    <child>
      <p slot="my-body">我是主体</p>
      <p>我是其他内容</p>
      <p slot="my-footer">我是尾部</p>
    </child>
  </p>
  `,
  components: {
    'child': childNode
  },
};
ログイン後にコピー
ログイン後にコピー

var childNode = {
  template: `  <p class="child">
    <p>子组件</p>
    <slot name="my-body">主体默认值</slot>
  </p>
  `,
};
ログイン後にコピー

匿名スロットが複数ある場合は、vueエラーが報告されます

🎜🎜
var parentNode = {
  template: `  <p class="parent">
    <p>父组件</p>
    <child>
      <p slot="my-body">我是主体</p>
      <p>我是其他内容</p>
      <p slot="my-footer">我是尾部</p>
    </child>
  </p>
  `,
  components: {
    'child': childNode
  },
};
ログイン後にコピー
ログイン後にコピー
🎜🎜🎜🎜🎜 【デフォルト値】🎜🎜 もともと<slot>タグ内にあるものはすべて🎜フォールバックコンテンツ🎜とみなされ、デフォルト値として知られています。バックアップ コンテンツは子コンポーネントのスコープでコンパイルされ、ホスト要素が空で挿入するコンテンツがない場合にのみバックアップ コンテンツが表示されます🎜🎜 スロットにデフォルト値があり、親要素に何もない場合<子>コンテンツに挿入すると、デフォルト値が表示されます🎜🎜🎜
<p class="child">
  <slot text="hello from child"></slot></p>
ログイン後にコピー
ログイン後にコピー
🎜🎜🎜 🎜🎜 スロットにデフォルト値があり、親要素にに挿入する内容がある場合、設定値が表示されます🎜🎜🎜
var childNode = {
  template: `  <p class="child">
    <p>子组件</p>
      <slot xxx="hello from child"></slot>
  </p>
  `,
};
var parentNode = {
  template: `  <p class="parent">
    <p>父组件</p>
    <child>
      <template scope="props">
        <p>hello from parent</p>
        <p>{{ props.xxx }}</p>
      </template>
    </child>
  </p>
  `,
  components: {
    'child': childNode
  },
};
ログイン後にコピー
ログイン後にコピー
🎜🎜🎜🎜🎜 🎜

名前付きスロット

🎜 <slot> 要素では、特別な属性 name を使用して、コンテンツの配布方法を構成できます。複数のスロットには異なる名前を付けることができます。名前付きスロットは、対応する slot 属性を持つコンテンツ フラグメント内の要素と一致します 🎜🎜🎜
var childNode = {
  template: `  <ul>
    <slot name="item" v-for="item in items" :text="item.text">默认值</slot>
  </ul>
  `,
  data(){
    return{
      items:[
        {id:1,text:'第1段'},
        {id:2,text:'第2段'},
        {id:3,text:'第3段'},
      ]
    }
  }
};
ログイン後にコピー
ログイン後にコピー
🎜🎜🎜🎜
var parentNode = {
  template: `  <p class="parent">
    <p>父组件</p>
    <child>
      <template slot="item" scope="props">
        <li>{{ props.text }}</li>
      </template>
    </child>
  </p>
  `,
  components: {
    'child': childNode
  },
};
ログイン後にコピー
ログイン後にコピー
🎜🎜🎜🎜🎜🎜 匿名スロットを使用することもできます。デフォルト スロット🎜、コンテンツ フラグメントに一致する代替スロットが見つかりませんでした。匿名スロットは、スロット属性のない要素のスロットとしてのみ使用できます。スロット属性が設定されていない場合、スロットは破棄されます。私は他のコンテンツです

<slot> を挿入し、

が破棄されます 🎜🎜🎜🎜🎜 デフォルトのスロットがない場合、一致するものが見つからないこれらのコンテンツ フラグメントは、も破棄されます 🎜🎜🎜rrreee🎜🎜🎜🎜rrreee🎜🎜🎜

I am other content

作用域插槽

  作用域插槽是一种特殊类型的插槽,用作使用一个 (能够传递数据到) 可重用模板替换已渲染元素。

  在子组件中,只需将数据传递到插槽,就像将 props 传递给组件一样

<p class="child">
  <slot text="hello from child"></slot></p>
ログイン後にコピー
ログイン後にコピー

  在父级中,具有特殊属性 scope<template> 元素必须存在,表示它是作用域插槽的模板。scope 的值对应一个临时变量名,此变量接收从子组件中传递的 props 对象

var childNode = {
  template: `  <p class="child">
    <p>子组件</p>
      <slot xxx="hello from child"></slot>
  </p>
  `,
};
var parentNode = {
  template: `  <p class="parent">
    <p>父组件</p>
    <child>
      <template scope="props">
        <p>hello from parent</p>
        <p>{{ props.xxx }}</p>
      </template>
    </child>
  </p>
  `,
  components: {
    'child': childNode
  },
};
ログイン後にコピー
ログイン後にコピー

  如果渲染以上结果,得到的输出是

【列表组件】

  作用域插槽更具代表性的用例是列表组件,允许组件自定义应该如何渲染列表每一项

var childNode = {
  template: `  <ul>
    <slot name="item" v-for="item in items" :text="item.text">默认值</slot>
  </ul>
  `,
  data(){
    return{
      items:[
        {id:1,text:'第1段'},
        {id:2,text:'第2段'},
        {id:3,text:'第3段'},
      ]
    }
  }
};
ログイン後にコピー
ログイン後にコピー

var parentNode = {
  template: `  <p class="parent">
    <p>父组件</p>
    <child>
      <template slot="item" scope="props">
        <li>{{ props.text }}</li>
      </template>
    </child>
  </p>
  `,
  components: {
    'child': childNode
  },
};
ログイン後にコピー
ログイン後にコピー

 

以上がVue コンテンツ配信スロットの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

iPhone で機密コンテンツの警告を有効にし、その機能について学ぶ方法 iPhone で機密コンテンツの警告を有効にし、その機能について学ぶ方法 Sep 22, 2023 pm 12:41 PM

特に過去 10 年間で、モバイル デバイスは友人や家族とコンテンツを共有する主な手段となりました。アクセスしやすく使いやすいインターフェイスと、画像やビデオをリアルタイムでキャプチャできる機能により、コンテンツの作成と共有に最適です。ただし、悪意のあるユーザーがこれらのツールを悪用して、閲覧に適しておらず、ユーザーの同意を必要としない不要な機密コンテンツを転送することは簡単です。これを防ぐために、iOS17では「センシティブコンテンツ警告」という新機能が導入されました。それとiPhoneでの使用方法を見てみましょう。新しい機密コンテンツに関する警告とは何ですか?またその仕組みは何ですか?前述したように、機密コンテンツの警告は、ユーザーが iPhone などの機密コンテンツを閲覧できないように設計された新しいプライバシーおよびセキュリティ機能です。

Microsoft Edge ブラウザーを 360 ナビゲーションで開くように変更する方法 - 360 ナビゲーションで開くように変更する方法 Microsoft Edge ブラウザーを 360 ナビゲーションで開くように変更する方法 - 360 ナビゲーションで開くように変更する方法 Mar 04, 2024 pm 01:50 PM

Microsoft Edge ブラウザーを開くページを 360 ナビゲーションに変更するにはどうすればよいですか? それは実際には非常に簡単なので、ここで Microsoft Edge ブラウザーを開くページを 360 ナビゲーションに変更する方法を共有します。見てください。皆さんのお役に立てれば幸いです。 Microsoft Edgeブラウザを開きます。以下のようなページが表示されます。右上隅にある三点アイコンをクリックします。 「設定」をクリックします。設定ページの左欄にある「起動時」をクリックします。右の列の図に示されている 3 つの点をクリックし ([新しいタブを開く] をクリックしないでください)、[編集] をクリックして URL を「0」(またはその他の意味のない数字) に変更します。次に、「保存」をクリックします。次に「」を選択します。

中国語でCheat Engineを設定するにはどうすればよいですか? Cheat Engine設定中国式方法 中国語でCheat Engineを設定するにはどうすればよいですか? Cheat Engine設定中国式方法 Mar 13, 2024 pm 04:49 PM

CheatEngine は、ゲームのメモリを編集および変更できるゲーム エディタです。しかし、デフォルトの言語は中国語以外なので、多くの友人にとって不便です。今回はCheatEngineで中国語を設定する方法を編集者が詳しく紹介しますので、お役に立てれば幸いです。設定方法 1: 1. ダブルクリックしてソフトウェアを開き、左上隅の「編集」をクリックします。 2. 次に、下のオプションリストで「設定」をクリックします。 3. 開いたウィンドウインターフェイスで、左側の列の「言語」をクリックします

Microsoft Edge でダウンロード ボタンを設定する場所 - Microsoft Edge でダウンロード ボタンを設定する方法 Microsoft Edge でダウンロード ボタンを設定する場所 - Microsoft Edge でダウンロード ボタンを設定する方法 Mar 06, 2024 am 11:49 AM

Microsoft Edge で表示されるダウンロード ボタンを設定する場所をご存知ですか? 以下では、エディターが Microsoft Edge で表示されるダウンロード ボタンを設定する方法を説明します。お役に立てば幸いです。エディターに従って学習しましょうステップ 1: まず、Microsoft Edge ブラウザを開き、下の図に示すように、右上隅にある [...] ロゴをクリックします。ステップ 2: 次の図に示すように、ポップアップ メニューで [設定] をクリックします。ステップ 3: 次に、次の図に示すように、インターフェイスの左側にある [外観] をクリックします。ステップ 4: 最後に、[ダウンロード ボタンを表示] の右側にあるボタンをクリックすると、下図に示すように、灰色から青色に変わります。上記は、エディターが Microsoft Edge でダウンロード ボタンを設定する方法を説明する場所です。

Python コードを独立したアプリケーションに変換する: PyInstaller の錬金術 Python コードを独立したアプリケーションに変換する: PyInstaller の錬金術 Feb 19, 2024 pm 01:27 PM

PyInstaller は、開発者が Python コードをプラットフォームに依存しない自己完結型の実行可能ファイル (.exe または .app) にコンパイルできるオープン ソース ライブラリです。これは、Python コード、依存関係、およびサポート ファイルをまとめてパッケージ化し、Python インタープリターをインストールせずに実行できるスタンドアロン アプリケーションを作成することによって実現されます。 PyInstaller の利点は、Python 環境への依存関係がなくなり、アプリケーションを簡単に配布してエンド ユーザーにデプロイできることです。また、ユーザーがアプリケーションの設定、アイコン、リソース ファイル、環境変数をカスタマイズできるビルダー モードも提供します。 PyInstaller を使用して PyInstal をインストールし、Python コードをパッケージ化する

Python アプリケーションの究極の進化: PyInstaller は繭から現れ、蝶になります Python アプリケーションの究極の進化: PyInstaller は繭から現れ、蝶になります Feb 19, 2024 pm 03:27 PM

PyInstaller は、元のスクリプト形式を超えて Python アプリケーションを強化する革新的なツールです。 Python コードをスタンドアロンの実行可能ファイルにコンパイルすることにより、PyInstaller はコードの配布、展開、およびメンテナンスの新しい領域を解放します。単一のスクリプトから強力なアプリケーションへ これまで、Python スクリプトは特定の Python 環境にのみ存在していました。このようなスクリプトを配布するには、ユーザーが Python と必要なライブラリをインストールする必要がありますが、これは時間がかかり面倒なプロセスです。 PyInstaller では、Python コードと必要なすべての依存関係を単一の実行可能ファイルに結合する、パッケージ化の概念が導入されています。 PyInstaller の作業をパッケージ化するコードの芸術

時空の旅人アインの日常 永久コンテンツ更新 時空の旅人アインの日常 永久コンテンツ更新 Mar 01, 2024 pm 08:37 PM

「彩られた時空の旅人」は2月29日にアップデート決定 アインと一緒に野外音楽祭に参加するとアインとの好感度ボーナスが獲得できる 3月4日には「残響の休日カラータイム」イベントが開始. 、プレイヤーは休暇の旅程レベルをアップグレードして、新しいテキスト メッセージやロフター コンテンツのロックを解除できます。時空の旅人アインの日常 永久コンテンツアップデート 2月29日バージョン以降、新キャンパススケジュール【野外音楽祭参加】を体験でき、アインと一緒に参加すると好感度ボーナスが獲得可能。 3月4日9:30から4月15日05:00まで、「長期休暇・セクシータイム」イベント期間中に、[ホリデー旅程]レベルをレベル8とレベル28にアップグレードすると、それぞれ新しいテキストメッセージとロフターコンテンツのロックが解除されます。 *新しいSMSとロフターが追加されました

Solana の DEX レイアウトの分析: Jupiter はエコロジーの未来ですか? Solana の DEX レイアウトの分析: Jupiter はエコロジーの未来ですか? Mar 26, 2024 pm 02:10 PM

出典:Shenchao TechFlow Solanaエコシステムの注目度の高い新興プロジェクトとして、Jupiterは、立ち上げから間もないにもかかわらず、DeFi分野で急速に台頭してきました。しかし、このような急速に発展する環境においても、経済モデルの改善とトークン価格の安定は依然として重要です。これらのサポートがなければ、プロジェクトは容易に悪循環に陥り、最終的には衰退したり、プロジェクト自体を維持できなくなったりする可能性があります。したがって、Jupiter は、プロジェクトの長期的な発展と成功を確実にするために、経済設計を継続的に最適化し、トークン価格の安定を確保する必要があります。 Solana チェーンは過去 1 週間で好調なパフォーマンスを示し、そのトークン SOL が流通市場で急速に上昇し、Jupiter のトークン $JUP も過去 2 週間で上昇しました。

See all articles