スリ飯屋MaLankaのフリーエンジニアな日々

このブログでは、フリーランス5期目となる自身の実体験から、フリーランスエンジニアになるためのノウハウ、ブログや沖縄移住、スリランカの最新情報について発信します。

【Vue.js】v-modelでcheckboxの値の変更が反映されない

※記事内に提携先企業のアフィリエイト広告(リンク、バナー等)、Google広告を含む場合があります

【Vue.js】v-modelでcheckboxの値の変更が反映されない


こんにちは、現役沖縄フリーランスエンジニアのmah(MaLanka)です。


このブログでは、

僕がIT未経験から約1年でフリーランスエンジニアになるまでの過程、

ノウハウなどを書いていきます。


今回は、


  • Vue.js】v-modelでcheckboxの値の変更が反映されない


について書いていきます。




【Vue.js】v-modelでcheckboxの値の変更が反映されない





フォームのsubmit時、

checkboxだけ変更後の値が反映されなかった(true、falseが切り替わらなかった)ので備忘録。


結論


v-modelを使わず、

「初期値設定(v-bind)」と「変更を検知して代入(changeイベント)」のように、

処理を分ければOKでした。


サンプル


// xxx.vue
// public: false, というプロパティを持っているとする

// NG
<checkbox v-model="public"></checkbox>

// OK
// v-bind:checkedで初期値設定、changeイベントでpublicを反転させてpublicプロパティへ代入
<checkbox v-bind:checked="public" @change="public = !public"></checkbox>


下記issueのjsfiddleがわかりやすいです。


github.com

I think this should be re-opened, the issue is still present and is actually not releated to jQuery, which was the argument given for closing this. Vue not being able to react as expected to externally invoked events is especially problematic when we are talking about things like Selenium-driven regression testing, but it also affects cross-app interaction for Vue-based Widgets and many other things. Check out this fiddle to see the problem in action: https://jsfiddle.net/Sigma90/f9j5a8ny/ The first checkbox uses "v-bind:checked" and "v-on:change", the second one uses "v-model", which is supposed to be a shortcut for those two. Calling "dispatchEvent(new Event('change'))" on the first one changes the data as expected, but the same operation on the second one does nothing, despite the fact that the documentation and the previous commenter both state that the change event should work.


Vueが外部から呼び出されたイベントに期待どおりに反応できないことは、Selenium駆動の回帰テストなどについて話しているときに特に問題になりますが、Vueベースのウィジェットやその他の多くのアプリ間の相互作用にも影響します。 このフィドルをチェックして、実際の問題を確認してください:https: //jsfiddle.net/Sigma90/f9j5a8ny/ 最初のチェックボックスは「v-bind:checked」と「v-on:change」を使用し、2番目のチェックボックスは「v-model」を使用します。これはこれら2つのショートカットになるはずです。最初の1つで「dispatchEvent(newEvent( 'change'))」を呼び出すと、期待どおりにデータが変更されますが、ドキュメントと前のコメントの両方で変更イベントが示されているにもかかわらず、2番目の同じ操作では何も行われません。




Vue.jsやフロントエンドを学習したい方へ


自分の場合、

React.jsVue.jsTypeScriptはUdemyの下記コースで学習しました。


フロントエンドエンジニアのための React ・ Redux アプリケーション開発入門

Vue.js + Firebaseで作るシングルページアプリケーション

ハンズオンで学ぶ TypeScript - JavaScript エンジニアのための TypeScript徹底入門







最後に


下記の表に、

フリーランスエンジニア向けの人気エージェントをまとめてみました。


エージェント選びで悩んでいる方は是非参考にしてみてくださいね★


エージェント 詳細 最高単価/月 設立
フリエン(furien) 評判をチェック 180万円/月 2011年
ギークスジョブ 評判をチェック 180万円/月 2011年
フォスターフリーランス 評判をチェック 230万円/月 1996年
pe-bank(pebank) 評判をチェック 200万円/月 1989年
Midworks(ミッドワークス) 評判をチェック 200万円/月 2013年
レバテックフリーランス 評判をチェック 140万円/月 2005年




あわせて読みたい


www.malanka.tech


www.malanka.tech


www.malanka.tech


www.malanka.tech


www.malanka.tech


www.malanka.tech