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

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

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

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

データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

Q&A

解決済

1回答

1566閲覧

子コンポーネントのデータを親コンポーネントのデータに渡したい

widget11

総合スコア221

Vue.js

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

データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

0グッド

0クリップ

投稿2021/05/29 23:03

厳密に書くと親が持っているプロパティを子でpropsとして受け取り、そのpropsの値を子側で処理した後、再度その親のプロパティに返してあげたいです。
$emitを使用すると子から親に値を渡せるとのことですが、親のプロパティを変化させる方法がいまいち分からないです。

以下の様にcategoriesという値(配列)を子に渡すとします。
このcategoriesに子のメソッド内でthis.categories.push(id: 3, name: "hoge" })
という形で配列の長さを変更し、それを親のcategoriesに戻すといった処理を行いたいのですが、
emitを含めどの様に親と子コンポーネントで記載すれば良いか分かりません。

//parent <template> <v-app id="edit"> <Search :categories="categories"></Search> </v-app> </template> <script> export default{ data: function() { return{ categories: [], // <=この値を子から変化させたい } }, components: {  Search },    mounted: function() { axios .get('http://localhost:3000//users/'+ id +'/edit.json') .then((response) => {     response.data.categories.forEach((value) => {   this.categories.push({ id: value.id, name:value.name })   }      );    } } </script>
//chiled(dom部分省略) props: { categories: [],  }, methods: {   select(){    /*ここで配列の長さを変更したものを親のdata:categoriesに返す(反映)させたい    this.categories.push(id: 3, name: "hoge" })    */   } }

どの様な処理を加えれば上記を実現できるでしょうか?
ご回答いただけると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記のような形で親側で変更できるmethodを追加してあげると良いかなと思います。

vue

1//parent 2<template> 3 <v-app id="edit"> 4 //changeHogeを結びつける 5 <Search :categories="categories" @change-hoge="changeHoge"></Search> 6 </v-app> 7</template> 8<script> 9export default{ 10 data: function() { 11 return{ 12 categories: [], // <=この値を子から変化させたい 13 } 14 }, 15 components: {  16 Search 17 }, 18 methods: { 19 changeHoge (何か変更するデータ) { 20 //ここにcategoriesの変更を記載 21 } 22 }, 23   mounted: function() { 24 axios 25 .get('http://localhost:3000//users/'+ id +'/edit.json') 26 .then((response) => { 27    response.data.categories.forEach((value) => { 28   this.categories.push({ id: value.id, name:value.name }) 29   } 30     ); 31   } 32} 33</script>

vue

1//chiled(dom部分省略) 2 props: { 3 categories: [], 4  }, 5 methods: { 6  select(){ 7   /*ここで配列の長さを変更したものを親のdata:categoriesに返す(反映)させたい 8   this.categories.push(id: 3, name: "hoge" }) 9   */ 10 this.$emit("change-hoge", 何か変更するデータ) 11  } 12 }

投稿2021/05/29 23:22

m2l

総合スコア318

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

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

widget11

2021/06/01 17:37

なるほど!こういう渡し方をするんですね! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問