1212
1313Vue 3.4 以降は、[ ` defineModel() ` ] ( /api/sfc-script-setup#definemodel )  マクロを使うことが推奨されています:
1414
15- ``` vue 
16- <!-- Child.vue --> 
15+ ``` vue  [Child.vue]
1716<script setup> 
1817const model = defineModel() 
1918
@@ -30,8 +29,7 @@ function update() {
3029
3130親は ` v-model `  で値をバインドできます:
3231
33- ``` vue-html 
34- <!-- Parent.vue --> 
32+ ``` vue-html  [Parent.vue]
3533<Child v-model="countModel" /> 
3634``` 
3735
@@ -63,8 +61,7 @@ const model = defineModel()
6361
64623.4 以前は、上記の子コンポーネントはこのように実装されていました:
6563
66- ``` vue 
67- <!-- Child.vue --> 
64+ ``` vue  [Child.vue]
6865<script setup> 
6966const props = defineProps(['modelValue']) 
7067const emit = defineEmits(['update:modelValue']) 
@@ -80,8 +77,7 @@ const emit = defineEmits(['update:modelValue'])
8077
8178すると、親コンポーネントの ` v-model="foo" `  は次のようにコンパイルされます:
8279
83- ``` vue-html 
84- <!-- Parent.vue --> 
80+ ``` vue-html  [Parent.vue]
8581<Child 
8682  :modelValue="foo" 
8783  @update:modelValue="$event => (foo = $event)" 
@@ -103,20 +99,20 @@ const model = defineModel({ default: 0 })
10399::: warning 
104100もし ` defineModel `  props に ` default `  値を指定し、親コンポーネントからこの props に何も値を与えなかった場合、親と子のコンポーネント間で同期が取れなくなる可能性があります。以下の例では、親コンポーネントの ` myRef `  は undefined ですが、子コンポーネントの ` model `  は 1 です:
105101
106- ** 子コンポーネント:** 
107- 
108- ``` js 
102+ ``` vue  [Child.vue]
103+ <script setup> 
109104const model = defineModel({ default: 1 }) 
105+ </script> 
110106``` 
111107
112- ** 親コンポーネント:** 
113- 
114- ``` js 
108+ ``` vue  [Parent.vue]
109+ <script setup> 
115110const myRef = ref() 
116- ``` 
111+ </script> 
117112
118- ``` html 
119- <Child  v-model =" myRef"  ></Child >
113+ <template> 
114+   <Child v-model="myRef"></Child> 
115+ </template> 
120116``` 
121117
122118::: 
@@ -156,8 +152,7 @@ const myRef = ref()
156152
157153実際には次のようになります:
158154
159- ``` vue 
160- <!-- CustomInput.vue --> 
155+ ``` vue  [CustomInput.vue]
161156<script> 
162157export default { 
163158  props: ['modelValue'], 
@@ -183,8 +178,7 @@ export default {
183178
184179このコンポーネントで ` v-model `  を実装するもう 1 つの方法は、getter と setter の両方を持つ、書き込み可能な ` computed `  プロパティを使用することです。` get `  メソッドは ` modelValue `  プロパティを返し、` set `  メソッドは対応するイベントを発行する必要があります:
185180
186- ``` vue 
187- <!-- CustomInput.vue --> 
181+ ``` vue  [CustomInput.vue]
188182<script> 
189183export default { 
190184  props: ['modelValue'], 
@@ -221,8 +215,7 @@ export default {
221215
222216子コンポーネントでは、` defineModel() `  の第一引数に文字列を渡すことで、対応する引数をサポートできます:
223217
224- ``` vue 
225- <!-- MyComponent.vue --> 
218+ ``` vue  [MyComponent.vue]
226219<script setup> 
227220const title = defineModel('title') 
228221</script> 
@@ -243,8 +236,7 @@ const title = defineModel('title', { required: true })
243236<details >
244237<summary >3.4 以前の使用法</summary >
245238
246- ``` vue 
247- <!-- MyComponent.vue --> 
239+ ``` vue  [MyComponent.vue]
248240<script setup> 
249241defineProps({ 
250242  title: { 
@@ -271,8 +263,7 @@ defineEmits(['update:title'])
271263
272264この場合、デフォルトの ` modelValue `  props と ` update:modelValue `  イベントの代わりに、子コンポーネントは ` title `  props を受け取り、親コンポーネントの値を更新するためには ` update:title `  イベントを発行します:
273265
274- ``` vue 
275- <!-- MyComponent.vue --> 
266+ ``` vue  [MyComponent.vue]
276267<script> 
277268export default { 
278269  props: ['title'], 
@@ -412,7 +403,7 @@ console.log(modifiers) // { capitalize: true }
412403
413404修飾子に基づいて値の読み書きを条件付きで調整するために、` defineModel() `  に ` get `  と ` set `  オプションを渡すことができます。これら 2 つのオプションは、モデルの ref の読み取り・設定時に値を受け取り、変換された値を返す必要があります。以下は ` set `  オプションを使って ` capitalize `  修飾子を実装する方法です:
414405
415- ``` vue{6-8 } 
406+ ``` vue{4-6 } 
416407<script setup> 
417408const [model, modifiers] = defineModel({ 
418409  set(value) { 
0 commit comments