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

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

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

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

Q&A

解決済

1回答

3617閲覧

Vue.jsで同じコンポーネント内のmethods内で複数の関数を実行することは可能でしょうか??

amaturePy

総合スコア131

Vue.js

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

0グッド

0クリップ

投稿2021/02/05 08:51

編集2021/02/05 10:01

現在、Vue.jsのコンポーネントの機能を使って開発しています。
そこで、一部可能であれば同じコンポーネント内で複数の関数を呼びたいのですが、技術的に可能かどうかご教授願いたいです。

現在作成中の機能は以下です。
①セレクトボックス1でfunc1を発火させAPI1からリストを取得し、表示
②①の選択地を引数とし、API2を呼び出し、結果をセレクトボックス2に表示←ここまで実装済み
③②の選択値によって別の関数を発火

この中でセレクトボックス1ではAPIからデータを取得するfetchTags関数を既にmethods内で呼び出しているのですが、その他に同じmethods内でセレクトボックス2で特定の要素を選択した際にif分岐で別の関数を設置してAPIを呼ぼうと考えてます。
ですが、methods内に複数の関数を混在させる方法が見つからず、セレクトボックス1と2をそれぞれ別のコンポーネントとして作成する必要性を考えています。もし、同じコンポーネント内で複数の関数の呼び出しが技術的に可能な場合、そのVue.jsの記法などヒントを頂ければ幸いです。

<template> <div class="col-sm-2 col-form-label"> <h3>請選擇客戶名字</h3> <v-select v-model="tableSelected" :on-change="fetchTags()" :options="tables"> <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> </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>

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

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

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

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

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

Twoshi

2021/02/05 09:19

ご質問拝見いたしました。 セレクトボックス1というのは以下の記述箇所になりますでしょうか?(ソース上は下方にあるv-select) <v-select v-model="tagSelected" :options="tags" multiple>
amaturePy

2021/02/05 09:31

すみません。 分かりにくかったと思います。 セレクトボックス1は<v-select v-model="tableSelected" :on-change="fetchTags()" :options="tables"> こちらのテーブル名を取得している物になります。
amaturePy

2021/02/05 09:32

見て頂いてる<v-select v-model="tagSelected" :options="tags" multiple>の方はセレクトボックス2と称していて、こちらにで関数を発火させたいと思っています。
Twoshi

2021/02/05 09:34

ご回答いただきありがとうございます! セレクトボックス2にセレクトボックス1と同じようにon-changeを付与して、セレクトボックス1とは別な関数を呼び出したいという認識でよろしいでしょうか?
amaturePy

2021/02/05 09:34

再度日本語チェックします
amaturePy

2021/02/05 09:40

すみません。前提として1コンポーネント1methodsだと思っておりまして、既にmethodsはfetchTagsの処理が入っていり、セレクトボックス2の処理を加えられるかどうか悩んでおります。
amaturePy

2021/02/05 09:57

すみません!methods内で複数の処理を実行できるかがより適切な内容なので、質問文を訂正いたしました!
guest

回答1

0

ベストアンサー

コンポーネント内の関数の数に制約は無いはずです。
コンポーネント内に複数関数を作成する場合は「,」で区切ることで作ることができます。

以下例となります。
ご参考になれば幸いです。

template部分

Vue

1 <v-select v-model="tagSelected" :on-change="func1()" :options="tags" multiple> 2 <option v-for="tag in tags" :key="tag.id">{{ tag }}</option> 3 </v-select>

methods部分

Vue

1methods: { 2 fetchTags: function() { 3 // 省略 4 }, 5 func1: function() { 6 this.func2(); // thisを使ってmethods内の他関数を呼び出すこともできます。 7 /**処理 */ 8 }, 9 func2: function() { 10 /** 処理 */ 11 } 12 }

投稿2021/02/05 10:18

Twoshi

総合スコア354

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

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

amaturePy

2021/02/05 10:31

失礼しました! 調査不足でした。普通に関数を複数入れ込むことができるんですね。 methodsを複数作るなど誤った方法で進めてました。 反省いたします。
Twoshi

2021/02/05 10:42

いえいえ、少しでもお力になれれば幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問