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

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

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

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

JavaScript

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

Q&A

解決済

1回答

2289閲覧

vue.js 2次元配列にwatchを使いたい

aruto

総合スコア175

Vue.js

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

JavaScript

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

0グッド

0クリップ

投稿2018/08/19 07:23

前提・実現したいこと

2次元配列の値を変更し、watchでそれを捉えたいです。
配列は$setメソッドを使わないとリアクティブにならないと思うのですが、それの2次元配列での使い方がわからないです。

該当のソースコード

javascript

1//1次元配列のとき 2data(){ 3 return:{ 4 arr :[1,2,3] 5 } 6} 7methods:{ 8 test(){ 9 this.$set(this.arr, 1, 100) //これでリアクティブに変更できる 10 } 11//2次元配列のとき 12data(){ 13 return:{ 14 arr :[ 15 [11,12,13], 16 [21,22,23], 17 [31,32,33] 18 ] 19 } 20} 21methods:{ 22 test(){ 23 this.$set(this.arr, hogehoge, 100) //hogehogeにどう書けばいいかがわかりません 24 }

試したこと

  • hogehogeに[1][1]など入れてみたのですがだめでした。
  • 普通に変更した後にthis.$forceupdate()で更新も考えたのですが、これだとwatchに引っかからなかったです。(deep:trueなども試しました)

2次元配列の値を変更し、watchで捉える方法をご存知の方いましたら教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こちらを確認してください。
配列の変化を検出

配列の変更はここに記載されている関数を使わないとvueから検知されません。
内容の変更はspliceでの置き換えを試してみてください。

投稿2018/08/19 07:45

spookybird

総合スコア1803

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

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

aruto

2018/08/19 08:23

spliceを用いて2次元配列の一部だけを変更したい場合はindexの指定はどのようにしたらよいのでしょうか。
spookybird

2018/08/19 11:46

どう変更したいかによります。 「2次元配列」と考えるとややこしくなりますが、「配列の要素として配列が格納されている」と考えると大したことありません。 "arr"に格納されている配列のどれかを別の配列に置き換えたいのであれば、 arr.splice(x, 1, [置き換える配列]) のように書けばいいですし、"arr"に格納されているある配列の中のある要素を別の要素に置き換えたいのなら、 arr[y].splice(z, 1, 置き換える要素) のように書けば良いです。 ややこしければいったん変数に格納し const arrElm = arr[y]; arrElm.splice(z, 1, 置き換える要素); と書けば良いです。 「配列に変更を加える」ときに前述の関数を使う必要があるだけで、「参照する」分にはどう操作しても問題ありません。 2次元だろうと3次元だろうとN次元だろうと同じです。
aruto

2018/08/19 11:55

ありがとうございます。 >arr[y].splice(z, 1, 置き換える要素) これがまさしくしたいことです。 ずっとindex部分に別の指定方法があるのだろうと誤解していました。 おかげで助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問