Skip to content

Commit a25a888

Browse files

File tree

1 file changed

+26
-19
lines changed

1 file changed

+26
-19
lines changed

src/guide/component-slots.md

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ Vue には [Web Components spec draft](https://github.com/w3c/webcomponents/blob
4848
<todo-button>
4949
<!-- コンポーネントを使ってアイコンを追加 -->
5050
<font-awesome-icon name="plus"></font-awesome-icon>
51-
Your Profile
51+
Add todo
5252
</todo-button>
5353
```
5454

@@ -100,7 +100,6 @@ Vue には [Web Components spec draft](https://github.com/w3c/webcomponents/blob
100100

101101
> 親のテンプレート内の全てのものは親のスコープでコンパイルされ、子のテンプレート内の全てのものは子のスコープでコンパイルされる。
102102
103-
104103
## フォールバックコンテンツ
105104

106105
スロットに対して、コンテンツがない場合にだけ描画されるフォールバック (つまり、デフォルトの) コンテンツを指定すると便利な場合があります。例えば、`<submit-button>` コンポーネントにおいて:
@@ -222,7 +221,8 @@ Vue には [Web Components spec draft](https://github.com/w3c/webcomponents/blob
222221
</footer>
223222
</div>
224223
```
225-
**`v-slot` は([一つの例外](#デフォルトスロットしかない場合の省略記法) を除き) `<template>` にしか指定できないことに注意してください。
224+
225+
**`v-slot` は([一つの例外](#デフォルトスロットしかない場合の省略記法) を除き) `<template>` にしか指定できないことに注意してください。
226226

227227
## スコープ付きスロット
228228

@@ -247,8 +247,7 @@ app.component('todo-list', {
247247
})
248248
```
249249

250-
親コンポーネントでこれをカスタマイズするために、スロットに交換してもよいでしょう:
251-
250+
親コンポーネントでこれをカスタマイズするために、<span v-pre>`{{ item }}`</span> を `<slot>` に置き換えたい場合があります:
252251

253252
```html
254253
<todo-list>
@@ -259,23 +258,33 @@ app.component('todo-list', {
259258

260259
しかし、これは動作しません。というのも、 `item` にアクセスすることができるのは `<todo-list>` コンポーネントだけですが、ここで指定しているコンテンツは親コンポーネントで描画されるからです。
261260

262-
親コンポーネント内でスロットコンテンツとして `item` を使えるようにするためには、これを `<slot>` 要素の属性としてバインドします:
261+
親コンポーネント内でスロットコンテンツとして `item` を使えるようにするためには、これを `<slot>` 要素の属性として束縛します:
263262

264263
```html
265264
<ul>
266265
<li v-for="( item, index ) in items">
267-
<slot v-bind:item="item"></slot>
266+
<slot :item="item"></slot>
268267
</li>
269268
</ul>
270269
```
271270

272-
`<slot>` 要素にバインドされた属性は、 **スロットプロパティ** と呼ばれます。これで、親スコープ内で `v-slot` に値を指定して、渡されたスロットプロパティの名前を定義できます:
271+
必要な数の属性を `slot` に束縛できます:
272+
273+
```html
274+
<ul>
275+
<li v-for="( item, index ) in items">
276+
<slot :item="item" :index="index" :another-attribute="anotherAttribute"></slot>
277+
</li>
278+
</ul>
279+
```
280+
281+
`<slot>` 要素に束縛された属性は、 **スロットプロパティ** と呼ばれます。これで、親スコープ内で `v-slot` に値を指定して、渡されたスロットプロパティの名前を定義できます:
273282

274283
```html
275284
<todo-list>
276285
<template v-slot:default="slotProps">
277286
<i class="fas fa-check"></i>
278-
<span class="green">{{ slotProps.item }}<span>
287+
<span class="green">{{ slotProps.item }}</span>
279288
</template>
280289
</todo-list>
281290
```
@@ -291,7 +300,7 @@ app.component('todo-list', {
291300
```html
292301
<todo-list v-slot:default="slotProps">
293302
<i class="fas fa-check"></i>
294-
<span class="green">{{ slotProps.item }}<span>
303+
<span class="green">{{ slotProps.item }}</span>
295304
</todo-list>
296305
```
297306

@@ -300,7 +309,7 @@ app.component('todo-list', {
300309
```html
301310
<todo-list v-slot="slotProps">
302311
<i class="fas fa-check"></i>
303-
<span class="green">{{ slotProps.item }}<span>
312+
<span class="green">{{ slotProps.item }}</span>
304313
</todo-list>
305314
```
306315

@@ -309,10 +318,9 @@ app.component('todo-list', {
309318
```html
310319
<!-- 不正。警告が出ます -->
311320
<todo-list v-slot="slotProps">
312-
<todo-list v-slot:default="slotProps">
313-
<i class="fas fa-check"></i>
314-
<span class="green">{{ slotProps.item }}<span>
315-
</todo-list>
321+
<i class="fas fa-check"></i>
322+
<span class="green">{{ slotProps.item }}</span>
323+
316324
<template v-slot:other="otherSlotProps">
317325
slotProps is NOT available here
318326
</template>
@@ -325,13 +333,13 @@ app.component('todo-list', {
325333
<todo-list>
326334
<template v-slot:default="slotProps">
327335
<i class="fas fa-check"></i>
328-
<span class="green">{{ slotProps.item }}<span>
336+
<span class="green">{{ slotProps.item }}</span>
329337
</template>
330338

331339
<template v-slot:other="otherSlotProps">
332340
...
333341
</template>
334-
</current-user>
342+
</todo-list>
335343
```
336344

337345
### スロットプロパティの分割代入
@@ -358,7 +366,7 @@ function (slotProps) {
358366
```html
359367
<todo-list v-slot="{ item: todo }">
360368
<i class="fas fa-check"></i>
361-
<span class="green">{{ todo }}<span>
369+
<span class="green">{{ todo }}</span>
362370
</todo-list>
363371
```
364372

@@ -387,7 +395,6 @@ function (slotProps) {
387395

388396
`v-on``v-bind` と同様に `v-slot` にも省略記法があり、引数の前のすべての部分 (`v-slot:`) を特別な記号 `#` で置き換えます。例えば、`v-slot:header``#header` に書き換えることができます:
389397

390-
391398
```html
392399
<base-layout>
393400
<template #header>

0 commit comments

Comments
 (0)