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

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

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

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

JavaScript

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

Q&A

1回答

1472閲覧

【Vue.js, axios】axiosで取得したデータをdataに追加したい

matsuo_basho

総合スコア88

Vue.js

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

JavaScript

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

0グッド

0クリップ

投稿2021/10/21 18:19

いつも大変お世話になっております。

現在Shopifyを利用してサイトを作成しています。
商品詳細ページにアクセスした際に、①商品全体の情報、②個別の商品に紐づいたメタ情報
2点を別々で取得する必要があり、取得の際にaxiosを利用して取得しています。

できれば一度の axios.get() でそれぞれの情報を取得することができれば良いのですが、
それはshopifyの仕様上不可能なようなので、やむなく1つめの axios.get() の内部で、
別で axios.get() を実行しています。

今回生じている問題ですが、
2つ目(1つ目の axios.get() の内部で実行している別のaxios)のaxiosで返ってきたデータを
data()currentVariantMetafields に格納したいのですが、うまく格納されません。

調べてみるとアロー演算子を使用するのがよくないなど情報があるのですが、
当方エンジニアではなく付け焼き刃で行っているもので
アロー演算子からfunctions()の関数に変更してみても改善せずよくわからない状況になっています。

もし解決策が判る方がいらっしゃればご教授いただけますと幸いです。

それではどうぞ宜しくお願い致します。

###行いたいこと
datacurrentVariantMetafieldsselectCallback() 内で実行している
axiosで返ってきた値を格納したい。

###ソースコード

javascritpt

1// eslint-disable-next-line import/no-extraneous-dependencies 2import Vue from 'vue/dist/vue.min'; 3import axios from 'axios'; 4 5new Vue({ 6 7 delimiters : [ '${', '}' ], 8 9 data(){ 10 return { 11 12 siteUrl : '', 13 productUrl : '', 14 currentVariant : '', 15 currentVariantMetafields : [] 16 17 }; 18 }, 19 20 created(){ 21 const currentUrl = new URL(window.location.href); 22 this.siteUrl = currentUrl.origin; 23 const params = currentUrl.searchParams; 24 params.delete('variant'); 25 this.productUrl = currentUrl.href; 26 27 // 商品情報を取得 28 axios.get(`${this.productUrl}.js`) 29 .then((res) => { 30 // eslint-disable-next-line no-new,no-undef 31 new Shopify.OptionSelectors('product-select', { 32 product : res.data, 33 onVariantSelected : this.selectCallback, 34 enableHistoryState : true 35 }); 36 }) 37 .catch((err) => { 38 console.log(err); 39 }); 40 }, 41 42 methods : { 43 44 selectCallback(variant, selector){ 45 // 商品情報のメタ情報を取得 46 const variantUrl = `${this.siteUrl}/admin/products/${selector.product.id}/variants/${variant.id}/metafields.json`; 47 48 axios.get(variantUrl) 49 .then((res) => { 50 this.currentVariantMetafields = res.data; 51 }) 52 .catch((err) => { 53 console.log(err); 54 }); 55 56 // 出力して確認すると格納されていない 57 console.log(this.currentVariantMetafields); 58 } 59 60 } 61 62}).$mount('#app'); 63

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

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

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

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

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

guest

回答1

0

currentVariantMetafields を算出プロパティのどこからも返してないような気がしますが…。
メソッド側に書いていても、メソッドはイベントトリガーがあって初めて実行される処理です。

ちなみにアロー演算子が使えなかったのはVue.js(初代Vue)までなので、Vue2.xなら問題なく使えますよ。

投稿2021/10/22 00:39

FKM

総合スコア3647

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

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

matsuo_basho

2021/10/22 01:38

コメントありがとうございます! >currentVariantMetafields を算出プロパティのどこからも返してないような気がしますが…。 すみません、ポンコツすぎてこちらの意味がよくわからなかったのですが(泣)、 処理の流れとしては、 ① created() の axios.get() 内で new Shopify.OptionSelectors() が実行される ② new Shopify.OptionSelectors()が実行されたタイミングで selectCallback() が実行される この②の中で行われるaxios.get()で返ってきた値を currentVariantMetafields に格納したいです。 まずここまでの説明は理論的に合っていますでしょうか..?
FKM

2021/10/22 01:57

理論は合っているようなので、だとするとmethod内にある axios.get(variantUrl) .then((res) => { this.currentVariantMetafields = res.data; console.log(curretnVariantMetaFields) として、そこで値が取得できているでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問