質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

6760閲覧

[Vue]INPUTの内容が管理外で変更されたときデータに値を反映するには

4477

総合スコア91

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2017/02/05 05:07

編集2017/02/05 05:08

以下のような状況で、

HTML

1<div id="XXX"> 2 <input id="AAA" v-model="aaa"> 3</div> 4 5<script> 6var vm = new Vue({ 7 el: "#XXX", 8 data: { 9 aaa: '' 10 } 11}) 12</script>

input に手入力したときは vm.$data.aaa に反映されます。
vm.$data.aaa に値を代入すれば input の値が変わります。
ここまではVueの基本的なことで問題ないです。

ここでVue管理外で document.getElementById('AAA').value = '123'; などの変更がされると、
見た目にはinputの値は123になり、vm.$data.aaa の値は前の値のまま変わりません。

input の値を vm.$data.aaa に反映するにはどうするのがよいでしょうか。

input要素でinputイベントを発火すれば、Vueは紐づいているデータに値を反映してくれたのですが、これでよいのか自信がないです。

JavaScript

1document.getElementById('AAA').value = 'Vue管理外でvalueを書き換える'; 2 3var e = document.createEvent('HTMLEvents'); 4e.initEvent('input', false, true); 5document.getElementById('AAA').dispatchEvent(e); 6//ここまでやれば vm.$data.aaa が書き換わった

これはありでしょうか。もっと良い方法があるでしょうか。

Vueの管理外でDOMが変更されるのをなくすのが一番良いと思いますが、
VueなしからスタートしたプログラムでjQueryが横からDOMを変えてくる部分があって、
とりあえず今は何とかうまく共存できないかなと考えているところです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

DOMの直接操作が必要になる場合は、カスタムディレクティブを使用するのがVueでは一般的な方法だと思います。
Vue.js カスタムディレクティブ

jQuery等を使ってDOMを更新する処理は全てディレクティブ内に隠蔽し、後は更新対象となる要素に作ったディレクティブを適用するだけという形にすれば、DOM更新もVueの管理下に置けますし、何よりその処理の再利用性も高まります。

投稿2017/02/05 07:49

philomagi

総合スコア267

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

4477

2017/02/05 16:33

アドバイスありがとうございます。早速試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問