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

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

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

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

Q&A

解決済

1回答

2879閲覧

Vue で data コンポーネント内で参照している data 内の変数を更新を反映させたい

rera

総合スコア109

Vue.js

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

0グッド

0クリップ

投稿2019/01/03 13:31

ファイルをアップロードする際に、APIサーバーを通してcsrf tokenを取得して、ファイルをアップロードしたいため
下記コードを試しましたが、data コンポーネント内のcsrf_tokencreated時に上書きされたものではなく、デフォルトの''が使われています。

Javascript

1data () { 2 return { 3 csrf_token: '', 4 dropzoneOptions: { 5 url: 'http://localhost:3000/upload', 6 headers: { 'csrf_token': this.csrf_token } 7 } 8 } 9 }, 10 created: function () { 11 this.$axios.get(this.baseURL + '/csrf_token').then(response => { 12 this.csrf_token = response.data.csrf_token 13 }) 14 }

6行目のthis.csrf_tokenを変数ではなく特定の文字列にしたところ、きちんと API サーバー側にも届いてることを確認できました。
このような場合、どうしたらいいのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

JavaScriptのthisをあいまいに理解しているようです。

data () { return { csrf_token: '', dropzoneOptions: { url: 'http://localhost:3000/upload', headers: { 'csrf_token': this.csrf_token } // (1) } } }

(1)の時点でthisはいわゆる「コンポーネント自身」ではないです。

データを、他のデータに依存して変更(設定)したい場合は、created()の中で行います。
this.$set()を利用しているのは、入れ子になったオブジェクトのプロパティを変更するためで、「データを、他のデータに依存して変更」するという本筋とは関係ありません。)

data () { return { csrf_token: '', dropzoneOptions: { url: 'http://localhost:3000/upload', headers: { 'csrf_token': this.csrf_token } // (1) } } }, created() { this.$set(this.dropzoneOptions.headers, 'csrf_token', this.csrf_token) }

質問にのっているコードが部分的なので、正解を全部はかけませんので、
不明点があれば、コメントでお知らせください。


補足

投稿2019/01/03 13:59

NozomuIkuta

総合スコア1260

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

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

rera

2019/01/03 14:13

NozomuIkuta さん いつもありがとうございます。大変助かっております。 提示していただいたコードで問題なく、data 内のオブジェクトを書き換えることができました!
NozomuIkuta

2019/01/03 14:20

解決したようでよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問