슬롯


이 페이지에서는 구성 요소 기본 사항을 읽었다고 가정합니다. 아직 컴포넌트에 대해 잘 모르신다면 먼저 읽어보시길 권합니다.

2.6.0에서는 명명된 슬롯과 범위가 지정된 슬롯에 대한 새로운 통합 구문(v-slot 지시어)을 도입했습니다. 이는 현재 더 이상 사용되지 않지만 제거되지 않고 여전히 문서 내 v-slot 指令)。它取代了 slot 和 slot-scope 这两个目前已被废弃但未被移除且仍在文档中的特性。新语法的由来可查阅这份 RFC


目录



插槽内容


Vue 实现了一套内容分发的 API,这套 API 的设计灵感源自 Web Components 规范草案,将 <slot> 元素作为承载分发内容的出口。

它允许你像这样合成组件:

<navigation-link url="/profile">
  Your Profile
</navigation-link>

然后你在 <navigation-link> 的模板中可能会写为:

<a
  v-bind:href="url"
  class="nav-link"
>
  <slot></slot>
</a>

当组件渲染的时候,<slot></slot> 기능입니다. 새로운 구문의 출처는 RFC

.

🎜
🎜🎜목차
🎜
🎜
🎜🎜
🎜

슬롯 콘텐츠


🎜Vue는 콘텐츠 배포 API 세트를 구현하며, 이 API의 디자인은
웹 구성 요소 초안 사양 🎜은 <slot> 요소를 사용합니다. 분산된 콘텐츠를 전달하는 출구로 사용됩니다. 🎜🎜다음과 같이 구성 요소를 구성할 수 있습니다: 🎜
<navigation-link url="/profile">
  <!-- 添加一个 Font Awesome 图标 -->
  <span class="fa fa-user"></span>
  Your Profile
</navigation-link>
🎜 그런 다음 <navigation-link> 템플릿에 다음과 같이 작성할 수 있습니다. 🎜
<navigation-link url="/profile">
  <!-- 添加一个图标的组件 -->
  <font-awesome-icon name="user"></font-awesome-icon>
  Your Profile
</navigation-link>
🎜구성 요소가 렌더링되면 < ;slot> ;</slot>은 "귀하의 프로필"로 대체됩니다. 슬롯에는 HTML: 🎜
<navigation-link url="/profile">
  Logged in as {{ user.name }}
</navigation-link>
🎜 또는 기타 구성 요소인 🎜을 포함한 모든 템플릿 코드가 포함될 수 있습니다.
<navigation-link url="/profile">
  Clicking here will send you to: {{ url }}
  <!--
  这里的 `url` 会是 undefined,因为 "/profile" 是
  _传递给_ <navigation-link> 的而不是
  在 <navigation-link> 组件*内部*定义的。
  -->
</navigation-link>

<navigation-link><slot> 요소가 포함되어 있지 않으면 구성 요소의 시작 태그와 끝 태그 사이에 있는 모든 콘텐츠가 삭제됩니다. <navigation-link> 没有包含一个 <slot> 元素,则该组件起始标签和结束标签之间的任何内容都会被抛弃。


编译作用域


当你想在一个插槽中使用数据时,例如:

<button type="submit">
  <slot></slot>
</button>

该插槽跟模板的其它地方一样可以访问相同的实例属性 (也就是相同的“作用域”),而不能访问 <navigation-link> 的作用域。例如 url 是访问不到的:

<button type="submit">
  <slot>Submit</slot>
</button>

作为一条规则,请记住:

父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。


后备内容


有时为一个插槽设置具体的后备 (也就是默认的) 内容是很有用的,它只会在没有提供内容的时候被渲染。例如在一个 <submit-button> 组件中:

<submit-button></submit-button>

我们可能希望这个 <button> 内绝大多数情况下都渲染文本“Submit”。为了将“Submit”作为后备内容,我们可以将它放在 <slot> 标签内:

<button type="submit">
  Submit
</button>

现在当我在一个父级组件中使用 <submit-button> 并且不提供任何插槽内容时:

<submit-button>
  Save
</submit-button>

后备内容“Submit”将会被渲染:

<button type="submit">
  Save
</button>

但是如果我们提供内容:

<div class="container">
  <header>
    <!-- 我们希望把页头放这里 -->
  </header>
  <main>
    <!-- 我们希望把主要内容放这里 -->
  </main>
  <footer>
    <!-- 我们希望把页脚放这里 -->
  </footer>
</div>

则这个提供的内容将会被渲染从而取代后备内容:

<div class="container">
  <header>
    <slot name="header"></slot>
  </header>
  <main>
    <slot></slot>
  </main>
  <footer>
    <slot name="footer"></slot>
  </footer>
</div>


具名插槽


自 2.6.0 起有所更新。已废弃的使用 slot 特性的语法在这里

有时我们需要多个插槽。例如对于一个带有如下模板的 <base-layout> 组件:

<base-layout>
  <template v-slot:header>
    <h1>Here might be a page title</h1>
  </template>
  <p>A paragraph for the main content.</p>
  <p>And another one.</p>
  <template v-slot:footer>
    <p>Here's some contact info</p>
  </template>
</base-layout>

对于这样的情况,<slot> 元素有一个特殊的特性:name。这个特性可以用来定义额外的插槽:

<base-layout>
  <template v-slot:header>
    <h1>Here might be a page title</h1>
  </template>
  <template v-slot:default>
    <p>A paragraph for the main content.</p>
    <p>And another one.</p>
  </template>
  <template v-slot:footer>
    <p>Here's some contact info</p>
  </template>
</base-layout>

一个不带 name<slot> 出口会带有隐含的名字“default”。

在向具名插槽提供内容的时候,我们可以在一个 <template> 元素上使用 v-slot 指令,并以 v-slot 的参数的形式提供其名称:

<div class="container">
  <header>
    <h1>Here might be a page title</h1>
  </header>
  <main>
    <p>A paragraph for the main content.</p>
    <p>And another one.</p>
  </main>
  <footer>
    <p>Here's some contact info</p>
  </footer>
</div>

现在 <template> 元素中的所有内容都将会被传入相应的插槽。任何没有被包裹在带有 v-slot<template>


🎜

컴파일 범위


🎜슬롯의 데이터를 사용하려는 경우, 예: 🎜
<span>
  <slot>{{ user.lastName }}</slot>
</span>
🎜슬롯은 템플릿의 다른 곳과 동일한 인스턴스 속성(즉, 동일한 "범위")에 액세스할 수 있지만 < ;탐색 링크>에는 액세스할 수 없습니다. ; 예를 들어 URL에 액세스할 수 없습니다. 🎜
<current-user>
  {{ user.firstName }}
</current-user>
🎜원칙적으로 다음을 기억하세요. 🎜
🎜상위 템플릿의 모든 항목은 상위 범위에서 컴파일됩니다. 하위 템플릿 콘텐츠의 모든 항목은 하위 범위에서 컴파일됩니다. 🎜
🎜
🎜

백업 콘텐츠


🎜때때로 슬롯에 대한 특정 대체(즉, 기본) 콘텐츠를 설정하는 것이 유용할 때가 있습니다. 이는 콘텐츠가 제공되지 않을 때만 렌더링됩니다. 예를 들어 <submit-button> 구성 요소에서는 🎜
<span>
  <slot v-bind:user="user">
    {{ user.lastName }}
  </slot>
</span>
🎜대부분의 경우 이 <button>이 텍스트 "Submit"을 렌더링하기를 원할 수 있습니다. 대체 항목으로 "제출"을 사용하려면 <slot> 태그 안에 넣을 수 있습니다. 🎜
<current-user>
  <template v-slot:default="slotProps">
    {{ slotProps.user.firstName }}
  </template>
</current-user>
🎜이제 상위 구성 요소에서 <submit-button>을 사용할 때 ; 슬롯 콘텐츠가 제공되지 않은 경우: 🎜
<current-user v-slot:default="slotProps">
  {{ slotProps.user.firstName }}
</current-user>
🎜 대체 콘텐츠 "제출"이 렌더링됩니다: 🎜
<current-user v-slot="slotProps">
  {{ slotProps.user.firstName }}
</current-user>
🎜 하지만 콘텐츠를 제공하는 경우: 🎜
<!-- 无效,会导致警告 -->
<current-user v-slot="slotProps">
  {{ slotProps.user.firstName }}
  <template v-slot:other="otherSlotProps">
    slotProps is NOT available here
  </template>
</current-user>
🎜 제공된 콘텐츠가 렌더링되고 대체 콘텐츠가 대체됩니다: 🎜
<current-user>
  <template v-slot:default="slotProps">
    {{ slotProps.user.firstName }}
  </template>
  <template v-slot:other="otherSlotProps">
    ...
  </template>
</current-user>
🎜< br/>🎜

이름이 지정된 슬롯
🎜2.6.0부터 업데이트되었습니다. slot 속성 사용에 대한 더 이상 사용되지 않는 구문은 여기<에서 찾을 수 있습니다. /아>. 🎜
🎜때로는 여러 개의 슬롯이 필요할 때가 있습니다. 예를 들어, 다음 템플릿을 사용하는 <base-layout> 구성 요소의 경우: 🎜
function (slotProps) {
  // 插槽内容
}
🎜이러한 경우 <slot> 요소에는 특수 속성이 있습니다. 코드>이름. 이 기능은 추가 슬롯을 정의하는 데 사용할 수 있습니다. 🎜
<current-user v-slot="{ user }">
  {{ user.firstName }}
</current-user>
🎜 name이 없는 <slot> 콘센트는 암시적 이름 "default"를 갖습니다. 🎜🎜이름이 지정된 슬롯에 콘텐츠를 제공할 때 <template> 요소에 v-slot 지시문을 사용하고 v-slot <으로 끝낼 수 있습니다. /code>의 매개변수에는 다음 형식으로 이름이 지정됩니다. 🎜
<current-user v-slot="{ user: person }">
  {{ person.firstName }}
</current-user>
🎜이제 <template> 요소의 모든 내용이 해당 슬롯으로 전달됩니다. v-slot을 사용하여 <template>로 래핑되지 않은 모든 콘텐츠는 기본 슬롯의 콘텐츠로 처리됩니다. 🎜

그러나 더 명시적으로 만들고 싶다면 기본 슬롯의 내용을 <template>로 래핑할 수 있습니다. <template> 中包裹默认插槽的内容:

<current-user v-slot="{ user = { firstName: 'Guest' } }">
  {{ user.firstName }}
</current-user>

任何一种写法都会渲染出:

<base-layout>
  <template v-slot:[dynamicSlotName]>
    ...
  </template>
</base-layout>

注意: v-slot 只能添加在一个 <template> 上 (只有一种例外情况),这一点和已经废弃的 slot 特性不同。


作用域插槽


自 2.6.0 起有所更新。已废弃的使用 slot-scope 特性的语法在这里

有时让插槽内容能够访问子组件中才有的数据是很有用的。例如,设想一个带有如下模板的 <current-user> 组件:

<base-layout>
  <template #header>
    <h1>Here might be a page title</h1>
  </template>
  <p>A paragraph for the main content.</p>
  <p>And another one.</p>
  <template #footer>
    <p>Here's some contact info</p>
  </template>
</base-layout>

我们想让它的后备内容显示用户的名,以取代正常情况下用户的姓,如下:

<!-- 这样会触发一个警告 -->
<current-user #="{ user }">
  {{ user.firstName }}
</current-user>

然而上述代码不会正常工作,因为只有 <current-user> 组件可以访问到 user 而我们提供的内容是在父级渲染的。

为了让 user 在父级的插槽内容中可用,我们可以将 user 作为 <slot> 元素的一个特性绑定上去:

<current-user #default="{ user }">
  {{ user.firstName }}
</current-user>

绑定在 <slot> 元素上的特性被称为插槽 prop。现在在父级作用域中,我们可以给 v-slot 带一个值来定义我们提供的插槽 prop 的名字:

<ul>
  <li
    v-for="todo in filteredTodos"
    v-bind:key="todo.id"
  >
    {{ todo.text }}
  </li>
</ul>

在这个例子中,我们选择将包含所有插槽 prop 的对象命名为 slotProps,但你也可以使用任意你喜欢的名字。


独占默认插槽的缩写语法

在上述情况下,当被提供的内容只有默认插槽时,组件的标签才可以被当作插槽的模板来使用。这样我们就可以把 v-slot 直接用在组件上:

<ul>
  <li
    v-for="todo in filteredTodos"
    v-bind:key="todo.id"
  >
    <!--
    我们为每个 todo 准备了一个插槽,
    将 `todo` 对象作为一个插槽的 prop 传入。
    -->
    <slot name="todo" v-bind:todo="todo">
      <!-- 后备内容 -->
      {{ todo.text }}
    </slot>
  </li>
</ul>

这种写法还可以更简单。就像假定未指明的内容对应默认插槽一样,不带参数的 v-slot 被假定对应默认插槽:

<todo-list v-bind:todos="todos">
  <template v-slot:todo="{ todo }">
    <span v-if="todo.isComplete">?</span>
    {{ todo.text }}
  </template>
</todo-list>

注意默认插槽的缩写语法不能和具名插槽混用,因为它会导致作用域不明确:

<base-layout>
  <template slot="header">
    <h1>Here might be a page title</h1>
  </template>
  
  <p>A paragraph for the main content.</p>
  <p>And another one.</p>
  
  <template slot="footer">
    <p>Here's some contact info</p>
  </template>
</base-layout>

只要出现多个插槽,请始终为所有的插槽使用完整的基于 <template>

<base-layout>
  <h1 slot="header">Here might be a page title</h1>
  
  <p>A paragraph for the main content.</p>
  <p>And another one.</p>
  
  <p slot="footer">Here's some contact info</p>
</base-layout>

어느 쪽이든 렌더링됩니다.

<div class="container">
  <header>
    <h1>Here might be a page title</h1>
  </header>
  <main>
    <p>A paragraph for the main content.</p>
    <p>And another one.</p>
  </main>
  <footer>
    <p>Here's some contact info</p>
  </footer>
</div>

참고: < 코드 >v-slot
<template>에만 추가할 수 있습니다(예외), 이것과 더 이상 사용되지 않는 slot 기능이 다릅니다.

Scope 슬롯


2.6.0 이후 업데이트됨 이후 그 다음에. 더 이상 사용되지 않는 slot-scope 속성 사용 구문은 여기에서 찾을 수 있습니다. .

🎜때로는 하위 구성 요소에서만 사용할 수 있는 데이터에 슬롯 콘텐츠 액세스 권한을 부여하는 것이 유용할 때가 있습니다. 예를 들어, 다음 템플릿이 있는 <current-user> 구성 요소를 상상해 보세요. 🎜
<slot-example>
  <template slot="default" slot-scope="slotProps">
    {{ slotProps.msg }}
  </template>
</slot-example>
🎜 대체 콘텐츠에 다음과 같이 일반 사용자의 성 대신 사용자의 이름이 표시되기를 원합니다. 🎜
<slot-example>
  <template slot-scope="slotProps">
    {{ slotProps.msg }}
  </template>
</slot-example>
🎜그러나 <current-user> 구성 요소만 user에 액세스할 수 있고 우리가 제공하는 콘텐츠는 상위 수준에서 렌더링되기 때문에 위 코드는 제대로 작동하지 않습니다. . 🎜🎜부모 슬롯 콘텐츠에서 user를 사용할 수 있도록 하려면 요소의 속성으로 user를 바인딩하면 됩니다. 🎜
<slot-example>
  <span slot-scope="slotProps">
    {{ slotProps.msg }}
  </span>
</slot-example>
🎜 <slot> 요소에 바인딩된 속성을 🎜slot prop🎜이라고 합니다. 이제 상위 범위에서 v-slot에 제공하는 슬롯 prop의 이름을 정의하는 값을 제공할 수 있습니다. 🎜
<slot-example>
  <span slot-scope="{ msg }">
    {{ msg }}
  </span>
</slot-example>
🎜이 예에서는 모든 슬롯을 포함하도록 선택합니다. prop 객체의 이름은 다음과 같습니다. slotProps이지만 원하는 이름을 사용할 수 있습니다. 🎜🎜🎜🎜

🎜🎜전용 기본 슬롯에 대한 약어 구문🎜🎜🎜🎜위의 경우 제공된 컨텐츠에 기본 슬롯만 있는 경우 해당 컴포넌트의 라벨을 그대로 사용할 수 있습니다. 슬롯의 템플릿으로 사용됩니다. 이런 방식으로 구성 요소에서 직접 v-slot을 사용할 수 있습니다. 🎜

<todo-list v-bind:todos="todos">
  <template slot="todo" slot-scope="{ todo }">
    <span v-if="todo.isComplete">?</span>
    {{ todo.text }}
  </template>
</todo-list>
🎜이러한 작성 방법이 더 간단할 수 있습니다. 지정되지 않은 콘텐츠가 기본 슬롯에 해당하는 것으로 가정되는 것처럼 매개변수가 없는 v-slot은 기본 슬롯에 해당하는 것으로 가정됩니다. 🎜rrreee🎜기본 슬롯의 축약된 구문은 🎜 🎜 명명된 슬롯과 함께 사용됩니다. 범위가 모호해지기 때문에 슬롯을 혼합합니다: 🎜rrreee🎜 여러 슬롯이 존재할 때마다 항상 모든 슬롯에 대해 전체 <template> 기반 구문을 사용합니다: 🎜rrreee🎜 🎜🎜 🎜🎜🎜Destructuring Slot Prop🎜🎜🎜🎜범위가 지정된 슬롯의 내부 작동은 슬롯의 내용을 단일 인수로 전달되는 함수로 래핑하는 것입니다. 🎜rrreee

이는 v-slot의 값이 실제로 함수 정의에서 매개변수로 전달될 수 있는 모든 JavaScript 표현식이 될 수 있음을 의미합니다. 따라서 지원되는 환경(단일 파일 구성 요소 또는 최신 브라우저), ES2015 구조화하여 특정 항목을 전달합니다. 슬롯 소품은 다음과 같습니다: v-slot 的值实际上可以是任何能够作为函数定义中的参数的 JavaScript 表达式。所以在支持的环境下 (单文件组件现代浏览器),你也可以使用 ES2015 解构来传入具体的插槽 prop,如下:

rrreee

这样可以使模板更简洁,尤其是在该插槽提供了多个 prop 的时候。它同样开启了 prop 重命名等其它可能,例如将 user 重命名为 person

rrreee

你甚至可以定义后备内容,用于插槽 prop 是 undefined 的情形:

rrreee


动态插槽名


2.6.0 新增

动态指令参数也可以用在 v-slot 上,来定义动态的插槽名:

rrreee


具名插槽的缩写


2.6.0 新增

v-onv-bind 一样,v-slot 也有缩写,即把参数之前的所有内容 (v-slot:) 替换为字符 #。例如 v-slot:header 可以被重写为 #header

rrreee

然而,和其它指令一样,该缩写只在其有参数的时候才可用。这意味着以下语法是无效的:

rrreee

如果你希望使用缩写的话,你必须始终以明确插槽名取而代之:

rrreee


其它示例


插槽 prop 允许我们将插槽转换为可复用的模板,这些模板可以基于输入的 prop 渲染出不同的内容。这在设计封装数据逻辑同时允许父级组件自定义部分布局的可复用组件时是最有用的。

例如,我们要实现一个 <todo-list> 组件,它是一个列表且包含布局和过滤逻辑:

rrreee

我们可以将每个 todo 作为父级组件的插槽,以此通过父级组件对其进行控制,然后将 todo 作为一个插槽 prop 进行绑定:

rrreee

现在当我们使用 <todo-list> 组件的时候,我们可以选择为 todo 定义一个不一样的 <template>rrreee

특히 슬롯이 여러 소품을 제공하는 경우 템플릿을 더욱 간결하게 만들 수 있습니다. 또한 userperson으로 이름을 바꾸는 등 prop 이름 변경에 대한 다른 가능성도 열어줍니다. 🎜rrreee🎜정의되지 않은 슬롯 prop에 대한 대체 콘텐츠를 정의할 수도 있습니다. 상황: 🎜rrreee 🎜
🎜

동적 슬롯 이름

< hr/>
🎜2.6.0 새로운 🎜
🎜 동적 명령 매개변수 v-slot에서 동적 슬롯 이름을 정의하는 데 사용할 수도 있습니다: 🎜rrreee🎜
🎜

명명된 슬롯의 약어


🎜2.6.0 New 🎜
🎜follow v-on 좋아요 < code>v-bind, v-slot에도 약어가 있습니다. 즉, 매개변수(v-slot :) 앞의 모든 내용이 문자로 대체됩니다. #. 예를 들어, v-slot:header#header: 🎜rrreee🎜로 다시 작성할 수 있습니다. 그러나 다른 지시문과 마찬가지로 이 약어는 매개변수가 있는 경우에만 사용할 수 있습니다. 이는 다음 구문이 유효하지 않음을 의미합니다. 🎜rrreee🎜 약어를 사용하려면 항상 대신 슬롯 이름을 지정해야 합니다. 🎜rrreee🎜
🎜

다른 예


🎜슬롯 소품을 사용하면 슬롯을 재사용 가능한 템플릿으로 변환할 수 있습니다. 입력 소품을 기반으로 다양한 콘텐츠를 렌더링합니다. 이는 상위 구성요소가 레이아웃의 일부를 맞춤설정할 수 있도록 허용하면서 데이터 로직을 캡슐화하는 재사용 가능한 구성요소를 디자인할 때 가장 유용합니다. 🎜🎜예를 들어, 우리는 목록이고 레이아웃과 필터링 논리를 포함하는 <todo-list> 구성 요소를 구현하려고 합니다. 🎜rrreee🎜각 할 일을 상위 항목의 슬롯으로 사용할 수 있습니다. 구성 요소를 사용하여 상위 구성 요소를 통해 제어한 다음 todo를 슬롯 소품으로 바인딩합니다. 🎜rrreee🎜이제 <todo-list> 구성 요소를 사용할 때 다음을 수행할 수 있습니다. 대안으로 todo에 대해 다른 <template>을 정의하고 하위 구성 요소에서 데이터를 가져오도록 선택하세요. 🎜rrreee

이것은 범위가 지정된 슬롯이 유용할 수 있는 빙산의 일각에 불과합니다. 범위가 지정된 슬롯을 더 실제적으로 사용하려면 Vue Virtual Scroller, Vue PromisedPortal Vue와 같은 라이브러리를 찾아보는 것이 좋습니다.


더 이상 사용되지 않는 구문


v-slot 지시문은 slot API 대안에 대한 더 나은 지원을 제공하기 위해 Vue 2.6.0에 도입되었습니다. 슬롯 범위 기능에 추가하세요. v-slot 전체 출처는 다음을 참조하세요. v-slot 指令自 Vue 2.6.0 起被引入,提供更好的支持 slot 和 slot-scope 特性的 API 替代方案。v-slot 完整的由来参见这份 RFC。在接下来所有的 2.x 版本中 slot 和 slot-scope 特性仍会被支持,但已经被官方废弃且不会出现在 Vue 3 中。


带有 slot 特性的具名插槽

自 2.6.0 起被废弃。新推荐的语法请查阅这里

<template> 上使用特殊的 slot 特性,可以将内容从父级传给具名插槽 (把这里提到过的 <base-layout> 组件作为示例):

rrreee

或者直接把 slot 特性用在一个普通元素上:

rrreee

这里其实还有一个未命名插槽,也就是默认插槽,捕获所有未被匹配的内容。上述两个示例的 HTML 渲染结果均为:

rrreee


带有 slot-scope 特性的作用域插槽

自 2.6.0 起被废弃。新推荐的语法请查阅这里

<template> 上使用特殊的 slot-scope 特性,可以接收传递给插槽的 prop (把这里提到过的 <slot-example>

RFC🎜🎜🎜. slotslot-scope 기능은 모든 후속 2.x 버전에서 계속 지원되지만 공식적으로 더 이상 사용되지 않으며 Vue 3에는 표시되지 않습니다. 🎜🎜🎜🎜🎜

🎜 슬롯 기능이 있는 명명된 슬롯🎜🎜 🎜🎜 🎜🎜2.6.0부터 더 이상 사용되지 않습니다. 새로운 권장 구문을 보려면 🎜🎜여기🎜🎜🎜를 확인하세요. 🎜🎜🎜<template>의 특수 slot 속성을 ​​사용하여 상위 항목의 콘텐츠를 명명된 슬롯으로 전달합니다(여기🎜에서 <base-layout> 구성요소를 예로 언급했습니다.):🎜rrreee 🎜또는 직접 사용 일반 요소의 slot 속성: 🎜rrreee🎜여기에는 실제로 이름이 지정되지 않은 슬롯이 있는데, 이는 일치하지 않는 모든 콘텐츠를 캡처하는 🎜기본 슬롯🎜입니다. 위 두 가지 예의 HTML 렌더링 결과는 다음과 같습니다. 🎜rrreee🎜🎜🎜

🎜with slot-scope 속성의 범위 슬롯 🎜🎜🎜🎜🎜은 2.6.0부터 더 이상 사용되지 않습니다. 새로운 권장 구문을 보려면 여기🎜를 확인하세요. 🎜🎜 <template>의 특수 slot-scope 속성을 ​​사용하여 슬롯에 전달된 prop을 수신합니다( 여기 🎜에서 <slot-example> 구성 요소를 예로 언급했습니다. 🎜rrreee

여기서 slot-scope는 수신된 prop 객체가 <template> 범위에 slotProps 변수로 존재함을 선언합니다. JavaScript 함수 매개변수의 이름을 지정하는 것처럼 slotProps의 이름을 임의로 지정할 수 있습니다. slot-scope 声明了被接收的 prop 对象会作为 slotProps 变量存在于 <template> 作用域中。你可以像命名 JavaScript 函数参数一样随意命名 slotProps

这里的 slot="default" 可以被忽略为隐性写法:

rrreee

slot-scope 特性也可以直接用于非 <template> 元素 (包括组件):

rrreee

slot-scope 的值可以接收任何有效的可以出现在函数定义的参数位置上的 JavaScript 表达式。这意味着在支持的环境下 (单文件组件现代浏览器),你也可以在表达式中使用 ES2015 解构,如下:

rrreee

使用这里描述过的 <todo-list> 作为示例,与它等价的使用 slot-scope

여기에서 slot="default"는 암시적 쓰기로 무시될 수 있습니다.

rrreee
slot-scope 기능은 <가 아닌 경우에도 직접 사용할 수 있습니다. ;template> ; 요소(구성 요소 포함):

rrreee🎜 slot-scope 값은 함수 정의의 매개변수 위치에 나타날 수 있는 모든 유효한 JavaScript 표현식을 허용할 수 있습니다. 이는 지원되는 환경(단일 파일 구성요소 또는 최신 브라우저), /JavaScript/Reference 표현식에서 ES2015 구조 분해, 다음과 같습니다: 🎜rrreee🎜 여기에 설명된 < ;todo-list>를 사용하세요. ; 예를 들어, slot-scope를 사용하는 해당 코드는 다음과 같습니다: 🎜rrreee🎜🎜🎜