🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue.js

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

Q&A

解決済

1回答

2976閲覧

Vue.js v-selectの選択値を配列にしてaxiosの引数に渡したいです。

amaturePy

総合スコア131

Vue.js

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

0グッド

1クリップ

投稿2021/02/02 11:12

編集2021/02/02 12:46

こちらの質問の続きになります。前回質問
現在作成している機能は
1 APIで取得した配列を1つ目のセレクトタグに表示(ここまで実装済み)
2 1のセレクトタグから選択した値を配列にし、axiosのパラメーターに渡し、APIを呼び出す
3 2の結果として取得される配列を2つ目のセレクトタグに表示する←表示されない

postmanでの結果

API2_URL?tableName=clientA&tableName=clientB

イメージ説明

パラメーターに配列を与えれば画像のように配列の結果が取得されます。

そこで、デベロッパーコンソールでのエラーメッセージを出力させ、v-selectタグの選択値を配列にうまくまとめようとしているのですが、うまくいきません。

コンソールエラー内容 [Vue warn]: Invalid prop: type check failed for prop "options". Expected Array, got String with value "".

このエラー内容が関係してるかと踏んでいます。このエラーの解決方法並びにもし何かvue.js(v-select)で値を配列として取得する際に見落としている点などがありましたらご教授頂きたいです。
よろしくお願いします。
前回ご協力頂いた皆様ありがとうございました。

<template> <div class="col-sm-3 col-form-label"> <h2>クライアント名選択</h2> <v-select v-model="tableSelected" v-on:change="fetchTags()" :options="tables" multiple> <!-- <option v-for="table in tables" :key='table.id'>{{ table }}</option> --> </v-select> <ul v-if="errors && errors.length"> <li v-for="error of errors" :key='error.id'> {{error.message}} </li> </ul> <h2>カラム名選択</h2> <v-select v-model="tagSelected" :options="tags" multiple> <option v-for="tag in tags" :key='tag.id'>{{ tag }}</option> </v-select> <ul v-if="errors && errors.length"> <li v-for="error of errors" :key='error.id'> {{error.message}} </li> </ul> <button type="button" class="btn btn-primary">確定</button> </div> </template> <script> import axios from 'axios' import qs from 'qs'; export default { data () { return { tables: '', tableSelected: [], tags: '', tagSelected: '' } }, created () { axios.get('API1').then(response => { this.tables = response.data }) .catch(e => { this.errors.push(e) }) }, methods: { fetchTags: function () { axios.get('API2', { params: { tableName: this.tableSelected }, paramsSerializer: (params) => { return qs.stringify(params, { arrayFormat: 'repeat' }); } }).then(response => { this.tags = response.data }) .catch(e => { this.errors.push(e) }) } } } </script>

data内のtags:''→tags:[]に変更したデバッグ結果
イメージ説明

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

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

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

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

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

plasticgrammer

2021/02/02 11:32

エラーとしては、 optionsには配列が設定されていることを期待していたけど文字列("")が設定されていた というものです。
amaturePy

2021/02/02 11:45

失礼しました。 tags: ''をtags: []に変更し、上記のエラーは消えました。 デバッグするとtagsには[]のように空の配列が渡っているようでした。
plasticgrammer

2021/02/02 11:52

> tagsには[]のように空の配列が渡っているようでした。 これはAPI2が呼ばれた後という理解で正しいですか? だとすると、API2のレスポンスで[]が返ってきている状態かと思います。 上記理解が正しいとすると、後はAPI2の問題のような気がするのですがいかがでしょうか。
amaturePy

2021/02/02 12:03

いえ、すみません。勘違いでした。tagsに[]と入れたためにデバッグツールの方で空の[]が表示されただけでAPI2を叩いた結果ではないようです。
amaturePy

2021/02/02 12:11

APIの方は配列をパラメータに設置してあげれば帰ってくる値はただの配列なので、これをただループ処理で表示させるのみで問題ないかと思います。
plasticgrammer

2021/02/02 12:26

質問の情報を最新に更新くださいますようお願いします。 最新のソースと、何ができていて何ができていないのか(API2にパラメータは渡せている?)について記載頂けると助かります。
amaturePy

2021/02/02 12:46

はい。今ほど追加させて頂きました。
amaturePy

2021/02/02 14:55

今気づいたのですが、そもそもv-selectの中のv-on:changeが発火していないようです。 通常のselectタグではalert('ok');でアラートが確認できたのですが、上に記載しているv-selectでは表示されませんでした。 vue-selectのバージョンなども影響しているかもしれないので、調査してます。
guest

回答1

0

自己解決

v-selectタグ内のv-on:change="fetchTags()"を:on-change="fetchTags()"に変更することで解決致しました。ご協力頂いた方々ありがとうございました。
以下参考URLです。
参考

投稿2021/02/03 03:07

amaturePy

総合スコア131

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問