回答編集履歴

2

追記

2020/05/16 16:23

投稿

rubytomato
rubytomato

スコア1752

test CHANGED
@@ -242,11 +242,9 @@
242
242
 
243
243
  this.message = "変更できません";
244
244
 
245
- const vm = this;
246
-
247
245
  this.$nextTick(function() {
248
246
 
249
- vm.radioValue = "one";
247
+ this.radioValue = "one";
250
248
 
251
249
  });
252
250
 
@@ -281,3 +279,43 @@
281
279
  </script>
282
280
 
283
281
  ```
282
+
283
+
284
+
285
+ **追記 (2020/05/17)**
286
+
287
+
288
+
289
+ 上記はasync/awaitで下記のように書き直すことができます。
290
+
291
+
292
+
293
+ ```
294
+
295
+ methods: {
296
+
297
+ updatedRadio: async function(e) {
298
+
299
+ this.radioValue = e.target.value;
300
+
301
+
302
+
303
+ // DOM更新の完了を待つ
304
+
305
+ await this.$nextTick();
306
+
307
+
308
+
309
+ if (this.checkValue) {
310
+
311
+ this.message = "変更できません";
312
+
313
+ this.radioValue = "one";
314
+
315
+ }
316
+
317
+ }
318
+
319
+ },
320
+
321
+ ```

1

修正

2020/05/16 16:23

投稿

rubytomato
rubytomato

スコア1752

test CHANGED
@@ -137,3 +137,147 @@
137
137
  </script>
138
138
 
139
139
  ```
140
+
141
+
142
+
143
+ **修正**
144
+
145
+
146
+
147
+ 以下のように修正しました。これでチェックボックスがonのときは1番目のラジオボタンにチェックが強制的に付くようになります。
148
+
149
+
150
+
151
+ ```
152
+
153
+ <input type="checkbox" v-model="checkValue" />
154
+
155
+ <br />
156
+
157
+ <input
158
+
159
+ type="radio"
160
+
161
+ id="one"
162
+
163
+ value="one"
164
+
165
+ :checked="radioValue === 'one'"
166
+
167
+ @change="updatedRadio"
168
+
169
+ />
170
+
171
+ <label for="one">One</label>
172
+
173
+ <br />
174
+
175
+ <input
176
+
177
+ type="radio"
178
+
179
+ id="two"
180
+
181
+ value="two"
182
+
183
+ :checked="radioValue === 'two'"
184
+
185
+ @change="updatedRadio"
186
+
187
+ />
188
+
189
+ <label for="two">Two</label>
190
+
191
+ <br />
192
+
193
+ <input
194
+
195
+ type="radio"
196
+
197
+ id="three"
198
+
199
+ value="three"
200
+
201
+ :checked="radioValue === 'three'"
202
+
203
+ @change="updatedRadio"
204
+
205
+ />
206
+
207
+ <label for="three">three</label>
208
+
209
+ <div>{{ message }}</div>
210
+
211
+ ```
212
+
213
+
214
+
215
+ ```
216
+
217
+ <script>
218
+
219
+ export default {
220
+
221
+ data() {
222
+
223
+ return {
224
+
225
+ checkValue: false,
226
+
227
+ radioValue: null,
228
+
229
+ message: null
230
+
231
+ };
232
+
233
+ },
234
+
235
+ methods: {
236
+
237
+ updatedRadio(e) {
238
+
239
+ this.radioValue = e.target.value;
240
+
241
+ if (this.checkValue) {
242
+
243
+ this.message = "変更できません";
244
+
245
+ const vm = this;
246
+
247
+ this.$nextTick(function() {
248
+
249
+ vm.radioValue = "one";
250
+
251
+ });
252
+
253
+ }
254
+
255
+ }
256
+
257
+ },
258
+
259
+ watch: {
260
+
261
+ checkValue(newVal, val) {
262
+
263
+ if (newVal) {
264
+
265
+ this.radioValue = "one";
266
+
267
+ } else {
268
+
269
+ this.radioValue = null;
270
+
271
+ this.message = "";
272
+
273
+ }
274
+
275
+ }
276
+
277
+ }
278
+
279
+ };
280
+
281
+ </script>
282
+
283
+ ```