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

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

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

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

1711閲覧

Vue(nuxt) CompositionApi 別コンポーネントのクリックイベントでv-modelの値を取得したい

pokerStars

総合スコア67

Vue.js

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2021/06/27 08:11

編集2021/06/27 09:03

vue

1// 親コンポーネント ここで他の子コンポーネントを呼び出す 2<template lang="pug"> 3 .main 4 SearchClick(@clickclick="clickclick") 5 SearchForm(@items="inputItems") 6</template> 7 8<script lang="ts"> 9import { defineComponent, onBeforeMount } from '@nuxtjs/composition-api'; 10import SearchClick from '~/tests/components/SearchClick.vue'; 11import SearchForm from '~/tests/components/SearchForm.vue'; 12 13 14export default defineComponent({ 15 components: { 16 SearchClick, 17 SearchForm, 18 }, 19 props: {}, 20 setup() { 21 22 /** クリックイベント */ 23 const clickclick = () => { 24 console.log("クリックされました"); 25 }; 26 27 /** formで入力した値を取得したいイベント */ 28 const inputItems = (emitInputItems?: any) => { 29 console.log(emitInputItems); 30   // emitInputItemsに値が入らない 31 }; 32 33 34 return { 35 clickclick, 36 inputItems 37 }; 38 }, 39}); 40</script>

vue

1// SearchFormコンポーネント formの値入力のみ行う 2 3<template lang="pug"> 4.main 5 b-form-input( 6 type="text" 7 v-model="test1" 8 ) 9 b-form-input( 10 type="text" 11 v-model="test2" 12 ) 13 b-form-input( 14 type="text" 15 v-model="test3" 16 ) 17</template> 18 19<script lang="ts"> 20import { defineComponent } from '@nuxtjs/composition-api'; 21 22export default defineComponent({ 23 components: {}, 24 props: {}, 25 setup(_, {emit}) { 26 const test1 = ref(''); 27 const test2 = ref(''); 28 const test3 = ref(''); 29 30 const emitInputItems = () => { 31 const items: any = { 32 test1: test1.value, 33 test2: test2.value, 34 test3: test3.value, 35 }; 36 emit('items', { items }); 37 }; 38 39 40 return { 41 test1, 42 test2, 43 test3, 44 emitInputItems 45 }; 46 }, 47}); 48</script>

vue

1// SearchClickコンポーネント クリックイベントのみ行う 2 3<template lang="pug"> 4.main 5 b-button(variant="primary" @click="onClick") 保存 6</template> 7 8<script lang="ts"> 9import { defineComponent } from '@nuxtjs/composition-api'; 10 11export default defineComponent({ 12 components: {}, 13 props: {}, 14 setup(_, {emit}) { 15 const onClick = () => { 16 emit('clickclick'); 17 }; 18 19 return { 20 onClick 21 }; 22 }, 23}); 24</script>

別々のコンポーネントにした場合にv-modelに値が入るやり方がわかりません。
SearchClick.vueのクリックイベント発火時にSearchForm.vueのemitInputItems関数が実行されれば良いのだと思うのですが、うまく実装できないです・
ご教授お願いしたいです。
上記でわからない部分があれば補足いたしますので、何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

vue

1// 親コンポーネント ここで他の子コンポーネントを呼び出す 2<template lang="pug"> 3 .main 4 SearchClick(@clickclick="clickclick") 5 SearchForm(ref="children") 6</template> 7 8<script lang="ts"> 9import { defineComponent, onBeforeMount } from '@nuxtjs/composition-api'; 10import SearchClick from '~/tests/components/SearchClick.vue'; 11import SearchForm from '~/tests/components/SearchForm.vue'; 12 13 14export default defineComponent({ 15 components: { 16 SearchClick, 17 SearchForm, 18 }, 19 props: {}, 20 setup() { 21 22 const children = ref(); 23 24 /** クリックイベント */ 25 const clickclick = () => { 26 console.log("クリックされました"); 27 inputItems() 28 }; 29 30 /** formで入力した値を取得したいイベント */ 31 const inputItems = () => { 32 console.log(children.value.test1); 33 console.log(children.value.test2); 34 console.log(children.value.test3); 35 36 }; 37 38 39 return { 40 clickclick, 41 inputItems 42 }; 43 }, 44}); 45</script>

親から子の値やメソッドを呼び出せるthis.$refsを使い解決できました。
上記コードはCompositionApiを使っているので従来のthis.$refsの書き方とは異なっています。

投稿2021/06/27 10:29

pokerStars

総合スコア67

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問