@@ -40,7 +40,7 @@ app.mount('#components-demo')
40
40
41
41
<common-codepen-snippet title =" Component basics " slug =" abORVEJ " tab =" js,result " :preview =" false " />
42
42
43
- コンポーネントは再利用可能なインスタンスなので、` data ` 、 ` computed ` 、 ` watch ` 、 ` methods ` 、そしてライフサイクルフックのようなルートインスタンスと同様のオプションが利用可能です。唯一の例外は ` el ` のようなルート固有のオプションです。
43
+ コンポーネントは再利用可能なインスタンスなので、` data ` 、 ` computed ` 、 ` watch ` 、 ` methods ` 、そしてライフサイクルフックのようなルートインスタンスと同様のオプションが利用可能です。
44
44
45
45
## コンポーネントの再利用
46
46
@@ -66,7 +66,7 @@ app.mount('#components-demo')
66
66
67
67
例えば、 ヘッダー、サイドバー、コンテンツエリアなどのコンポーネントがあり、それぞれには一般的にナビゲーションリンクやブログ投稿などのコンポーネントが含まれています。
68
68
69
- これらのコンポーネントをテンプレートで使用するためには、 Vue がそれらを認識できるように登録する必要があります。 コンポーネントの登録には** グローバル** と** ローカル** の 2 種類があります。これまでは、アプリケーションの ` component ` メソッドを利用してグローバルに登録してきただけです:
69
+ これらのコンポーネントをテンプレートで使用するためには、 Vue がそれらを認識できるように登録する必要があります。コンポーネントの登録には** グローバル** と** ローカル** の 2 種類があります。これまでは、アプリケーションの ` component ` メソッドを利用してグローバルに登録してきただけです:
70
70
71
71
``` js
72
72
const app = Vue .createApp ({})
@@ -76,15 +76,15 @@ app.component('my-component-name', {
76
76
})
77
77
```
78
78
79
- グローバルに登録されたコンポーネントはその後作成された ` app ` インスタンスのテンプレートで使用することができます。さらに、ルートインスタンスのコンポーネントツリーの全てのサブコンポーネント内でも使用することが出来ます 。
79
+ グローバルに登録されたコンポーネントは、アプリケーション内のどのコンポーネントのテンプレートでも使うことができます 。
80
80
81
81
とりあえずコンポーネント登録についてはこれで以上ですが、このページを読み終えて十分に理解できたら、後から戻ってきて[ コンポーネント登録] ( component-registration.md ) の完全なガイドを読むことをお勧めします。
82
82
83
83
## プロパティを用いた子コンポーネントへのデータの受け渡し
84
84
85
- 先ほど、 ブログ投稿用のコンポーネントの作成について触れました。問題は、 表示する特定の投稿のタイトルや内容のようなデータを作成したコンポーネントに渡せなければそのコンポーネントは役に立たないということです。プロパティはここで役立ちます。
85
+ 先ほど、ブログ投稿用のコンポーネントの作成について触れました。問題は、表示する特定の投稿のタイトルや内容のようなデータを作成したコンポーネントに渡せなければそのコンポーネントは役に立たないということです。プロパティはここで役立ちます。
86
86
87
- プロパティはコンポーネントに登録できるカスタム属性です。値がプロパティ属性に渡されると、そのコンポーネントインスタンスのプロパティになります。先ほどのブログ投稿用のコンポーネントにタイトルを渡すためには、` props ` オプションを用いてこのコンポーネントが受け取るプロパティのリストの中に含めることができます:
87
+ プロパティはコンポーネントに登録できるカスタム属性です。値がプロパティ属性に渡されると、そのコンポーネントインスタンスのプロパティになります。先ほどのブログ投稿用のコンポーネントにタイトルを渡すためには、` props ` オプションを用いてこのコンポーネントが受け取るプロパティのリストの中に含めることができます:
88
88
89
89
``` js
90
90
const app = Vue .createApp ({})
@@ -97,9 +97,11 @@ app.component('blog-post', {
97
97
app .mount (' #blog-post-demo' )
98
98
```
99
99
100
- コンポーネントは必要に応じて多くのプロパティを持つことができ、デフォルトでは任意のプロパティに任意の値を渡すことができます。上記のテンプレートでは、 ` data ` と同様に、コンポーネントインスタンスでこの値にアクセスできることが分かります 。
100
+ プロパティ属性に値が渡されると、渡されたそのコンポーネントインスタンスのプロパティになります。そのプロパティの値は、他のコンポーネントのプロパティと同じように、テンプレート内でアクセスができます 。
101
101
102
- プロパティが登録されたら、 次のようにカスタム属性としてデータをプロパティに渡すことができます:
102
+ コンポーネントは必要に応じて多くのプロパティを持つことができ、デフォルトでは任意のプロパティに任意の値を渡すことができます。
103
+
104
+ プロパティが登録されたら、次のようにカスタム属性としてデータをプロパティに渡すことができます:
103
105
104
106
``` html
105
107
<div id =" blog-post-demo" class =" demo" >
@@ -154,7 +156,7 @@ app.mount('#blog-posts-demo')
154
156
155
157
## 子コンポーネントのイベントを購読する
156
158
157
- ` <blog-post> ` コンポーネントを開発する中で、いくつかの機能で親コンポーネントとの通信が必要になるかもしれません。例えば、残りの部分の大きさはそのままで、ブログ記事の文字の文字を拡大するアクセシビリティ機能を実装することを決めるかもしれません 。
159
+ ` <blog-post> ` コンポーネントを開発する中で、いくつかの機能で親コンポーネントとの通信が必要になるかもしれません。例えば、ページの他の部分の大きさはそのままで、ブログ記事のテキストを拡大するアクセシビリティ機能を実装することを決めるかもしれません 。
158
160
159
161
親コンポーネントでは、` postFontSize ` データプロパティを追加することでこの機能をサポートすることができます:
160
162
@@ -171,7 +173,7 @@ const App = {
171
173
}
172
174
```
173
175
174
- すべてのブログ投稿のフォントサイズを制御するためにテンプレート内で使用できます :
176
+ これはすべてのブログ投稿のフォントサイズを制御するためにテンプレート内で使用できます :
175
177
176
178
``` html
177
179
<div id =" blog-posts-events-demo" >
@@ -209,25 +211,25 @@ app.component('blog-post', {
209
211
</button >
210
212
```
211
213
212
- ボタンをクリックすると、全ての投稿のテキストを拡大する必要があることを親に伝える必要があります。親は、ネイティブ DOM イベントでの場合と同様に、 ` v-on ` や ` @ ` を用いて子コンポーネントのインスタンスでのイベントを購読することができます:
214
+ ボタンをクリックすると、全ての投稿のテキストを拡大する必要があることを親に伝える必要があります。この問題を解決するために、コンポーネントインスタンスはカスタムイベントの仕組みを提供しています。 親は、ネイティブ DOM イベントでの場合と同様に、 ` v-on ` や ` @ ` を用いて子コンポーネントのインスタンスでのイベントを購読することができます:
213
215
214
216
``` html
215
217
<blog-post ... @enlarge-text =" postFontSize += 0.1" ></blog-post >
216
218
```
217
219
218
- そして子コンポーネントはビルトインの [ ** ` $emit ` ** メソッド] ( ../api/instance-methods.html#emit ) にイベントの名前を渡して呼び出すことで、イベントを送出することができます :
220
+ そして子コンポーネントはビルトインの [ ** ` $emit ` ** メソッド] ( ../api/instance-methods.html#emit ) にイベントの名前を渡して呼び出すことで、イベントを発行することができます :
219
221
220
222
``` html
221
223
<button @click =" $emit('enlargeText')" >
222
224
Enlarge text
223
225
</button >
224
226
```
225
227
226
- 親コンポーネントは ` v-on: enlarge-text="postFontSize += 0.1"` リスナーによって、このイベントを受け取り ` postFontSize ` を更新することができます 。
228
+ ` @ enlarge-text="postFontSize += 0.1"` リスナによって、親コンポーネントはこのイベントを受け取り ` postFontSize ` の値を更新することができます 。
227
229
228
230
<common-codepen-snippet title =" Component basics: emitting events " slug =" KKpGyrp " tab =" html,result " :preview =" false " />
229
231
230
- コンポーネントの ` emits ` オプションにより排出されたイベントをリストアップすることができます。
232
+ コンポーネントの ` emits ` オプションにより発行されたイベントを一覧することができます:
231
233
232
234
``` js
233
235
app .component (' blog-post' , {
@@ -238,9 +240,9 @@ app.component('blog-post', {
238
240
239
241
これにより、コンポーネントが排出する全てのイベントをチェックし、オプションでそれらを[ 検証する] ( component-custom-events.html#validate-emitted-events ) ことができます。
240
242
241
- ### イベントと値を送出する
243
+ ### イベントと値を発行する
242
244
243
- イベントを特定の値と一緒に送出すると便利な場合があります 。例えば、テキストをどれだけ大きく表示するかを ` <blog-post> ` コンポーネントの責務とさせたいかもしれません。そのような場合、 ` $emit ` の第二引数を使ってこの値を渡すことができます:
245
+ イベントを特定の値と一緒に発行すると便利な場合があります 。例えば、テキストをどれだけ大きく表示するかを ` <blog-post> ` コンポーネントの責務とさせたいかもしれません。そのような場合、 ` $emit ` の第二引数を使ってこの値を渡すことができます:
244
246
245
247
``` html
246
248
<button @click =" $emit('enlargeText', 0.1)" >
@@ -300,13 +302,14 @@ methods: {
300
302
これが実際に機能するためには、テンプレート内の ` <input> ` は以下でなければなりません:
301
303
302
304
- ` value ` 属性を ` modelValue ` プロパティにバインドする
303
- - ` input ` では、 ` update:modelValue ` イベントを新しい値と共に送出する
305
+ - ` input ` では、 ` update:modelValue ` イベントを新しい値と共に発行する
304
306
305
307
以下のようになります:
306
308
307
309
``` js
308
310
app .component (' custom-input' , {
309
311
props: [' modelValue' ],
312
+ emits: [' update:modelValue' ],
310
313
template: `
311
314
<input
312
315
:value="modelValue"
@@ -322,15 +325,12 @@ app.component('custom-input', {
322
325
<custom-input v-model =" searchText" ></custom-input >
323
326
```
324
327
325
- カスタムコンポーネント内で ` v-model ` を使うもう一つの方法は ` computed ` プロパティを利用してゲッターとセッターを定義することです。
326
-
327
- 以下の例では、computed プロパティを用いて ` custom-input ` コンポーネントをリファクタリングします。
328
-
329
- 注意して欲しいのは、 ` get ` メソッドは ` modelValue ` 属性を返し、バインディングに使用しているプロパティがどれであるかに関わらず、 ` set ` メソッドはそのプロパティに対応する ` $emit ` を送出しなければならないということです。
328
+ このコンポーネント内で ` v-model ` を実装するもう一つの方法は ` computed ` プロパティの機能を使ってゲッターとセッターを定義することです。 ` get ` メソッドは ` modelValue ` プロパティを返して、 ` set ` メソッドは対応するイベントを発行する必要があります。
330
329
331
330
``` js
332
331
app .component (' custom-input' , {
333
332
props: [' modelValue' ],
333
+ emits: [' update:modelValue' ],
334
334
template: `
335
335
<input v-model="value">
336
336
` ,
@@ -363,7 +363,7 @@ HTML 要素のように、コンポーネントに要素を渡すことができ
363
363
364
364
<common-codepen-snippet title =" Component basics: slots " slug =" jOPeaob " :preview =" false " />
365
365
366
- 幸いにも、この作業は Vue のカスタム ` <slot> ` 要素により非常に簡単になります :
366
+ これは、 Vue のカスタム ` <slot> ` 要素で達成できます :
367
367
368
368
``` js
369
369
app .component (' alert-box' , {
@@ -376,7 +376,7 @@ app.component('alert-box', {
376
376
})
377
377
```
378
378
379
- 上で見た通り、ただ渡したいところにスロットを追加するだけです 。それだけです。終わりです!
379
+ 上で見た通り、コンテンツを配置したいところにプレースホルダとして ` <slot> ` を使います 。それだけです。終わりです!
380
380
381
381
とりあえずスロットについてはこれで以上ですが、このページを読み終えて十分に理解できたら、後から戻ってきて[ スロット] ( component-slots.md ) の完全なガイドを読むことをお勧めします。
382
382
@@ -386,7 +386,7 @@ app.component('alert-box', {
386
386
387
387
<common-codepen-snippet title =" Component basics: dynamic components " slug =" oNXaoKy " :preview =" false " />
388
388
389
- 上記は Vue の ` <component> ` 属性に特別な属性である ` is ` を持たせることで実現しています :
389
+ 上記は Vue の ` <component> ` 要素に特別な ` is ` 属性を持たせることで実現しています :
390
390
391
391
``` html
392
392
<!-- コンポーネントは currentTabComponent に変更があったときに変更されます -->
@@ -400,7 +400,7 @@ app.component('alert-box', {
400
400
401
401
完全なコードを試すには [ この例] ( https://codepen.io/team/Vue/pen/oNXaoKy ) 、登録された名前ではなくコンポーネントのオプションオブジェクトをバインドしている例は[ こちらのバージョン] ( https://codepen.io/team/Vue/pen/oNXapXM ) を参照してください。
402
402
403
- この属性は通常の HTML 要素で使用することができますが、それらはコンポーネントとして扱われ、すべての属性は ** DOM 属性としてバインドされる ** ことを覚えておいてください。 ` value ` のようないくつかのプロパティが期待通りに動作するためには、 [ ` .prop ` 修飾子 ] ( ../api/directives.html#v-bind ) を用いてバインドする必要があります 。
403
+ また、 ` is ` 属性を使って通常の HTML 要素を作ることもできます 。
404
404
405
405
とりあえず動的なコンポーネントについてはこれで以上ですが、このページを読み終えて十分に理解できたら、後から戻ってきて[ 動的 & 非同期コンポーネント] ( ./component-dynamic-async.html ) の完全なガイドを読むことをお勧めします。
406
406
@@ -416,7 +416,7 @@ app.component('alert-box', {
416
416
</table >
417
417
```
418
418
419
- このカスタムコンポート ` <blog-post-row> ` は無効なコンテンツとして摘み出され、最終的に描画された内容にエラーが発生します。幸い、これを回避するために ` v-is ` という特殊なディレクティブを使用することができます :
419
+ このカスタムコンポーネント ` <blog-post-row> ` は無効なコンテンツとして巻き取られ、最終的にレンダリングされた出力でエラーが発生します。回避策として特別な ` v-is ` ディレクティブを使うことができます :
420
420
421
421
``` html
422
422
<table >
@@ -425,7 +425,7 @@ app.component('alert-box', {
425
425
```
426
426
427
427
::: warning
428
- ` v-is ` の値は JavaScript の文字列リテラルである必要があります :
428
+ ` v-is ` の値は JavaScript の式として扱われるので、コンポーネント名を引用符で囲む必要があります :
429
429
430
430
``` html
431
431
<!-- 間違い、何も出力されません-->
0 commit comments