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

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

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

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

JavaScript

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

Q&A

解決済

1回答

3295閲覧

Vue 非親子間のデータのやりとり

yokuwakaran

総合スコア15

Vue.js

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

JavaScript

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

0グッド

0クリップ

投稿2021/06/05 00:22

Vueに関する質問です。

#ComponentA
#ComponentB

上記があるとして、AでのクリックイベントをBで検知したいという想定です。
二つが親子関係ならpropsやemitを使うのですが、今回の場合は違います。

こういう場合、vuexを使う以外で、何か変更検知する方法はあるのでしょうか?
template入らず、データだけを渡したいのです。

まだvueを触ってから日が浅いので無知な質問かもですが、よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Vuexを使わないやり方以外ですと下記がございます。

  1. (Vue3の場合)provide injectを用いる

下記に詳細のドキュメントがございますが、
provide と injectを用いることでvuexと同等の状態管理を実現できます。
https://v3.ja.vuejs.org/guide/component-provide-inject.html

  1. (Vue2の場合)vue.observableを用いる

vuw2.6.0以上であれば下記のような形でvue.observableを用いて実現可能です。

store.js

javascript

1import Vue from "vue" 2const state = Vue.observable({ counter: 0 }) 3export const increment = () => state.counter++ 4export const decrement = () => state.counter-- 5export default state

vueのコンポーネント

vue

1<template> 2 <div> 3 <p>The counter value is {{counter}}</p> 4 <button @click="inc">+</button> 5 <button @click="dec">-</button> 6 </div> 7</template> 8<script> 9 import store, { increment, decrement } from "./store"; 10 export default { 11 computed: { 12 counter() { 13 return store.counter; 14 } 15 }, 16 methods: { 17 inc() { 18 increment(); 19 }, 20 dec() { 21 decrement(); 22 } 23 } 24 }; 25</script>

投稿2021/06/05 22:10

m2l

総合スコア318

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

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

yokuwakaran

2021/06/06 00:03

ありがとうございます。解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問