1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vuejsで非親子関係のコンポーネントを同期する

1
Last updated at Posted at 2019-12-29

Vuejsでコンポーネントを同期する

やったこと

非親子関係のコンポーネントを同期させる。

実際にできたもの

ボタンを押した数だけどちらのコンポーネントも加算される

285kb-0cb47.gif

構成

commponents
 ┣ Button.vue 
 ┣ Component1
 ┣ Component2
 ┗ HelloWorld.vue

Component1とComponent2のコンポーネントを同期させる

Button.vue

<template>
  <div>
    <v-btn color="primary" @click="click()">ボタン</v-btn>
    {{dataset.count}}{{message}}
  </div>
</template>
<script>
export default {
  props: { dataset: { type: Object, default: null } },
  data() {
    return {
      message: ""
    };
  },
  methods: {
    click() {
      this.message = "押されたよ";
      this.dataset.count += 1;
    }
  }
};
</script>>

dataset.countにボタンを押された回数が入っている。
propsで同じ変数を見るようにする。

Component1.vue,Component2.vue

Component1.vueとComponent2.vueは中身は同じ。
バインディングするプロパティ(:dataset="datasetHoge")をComponent1.vue/Component2.vueで同じにする。
同じプロパティをバインドすることで、非親子間での動機が可能になる

<template>
  <div>
    <Button :dataset="datasetHoge" />
  </div>
</template>
<script>
import Button from "./Button";
export default {
  props: {
    dataset: {
      type: Object,
      default: null
    }
  },
  components: {
    Button
  },
  data() {
    return { datasetHoge: this.dataset };
  }
};
</script>>

HelloWorld.vue

<template>
  <div>
    <v-col cols="3">
      <Component1 :dataset="dataset" />
    </v-col>
    <v-col cols="3">
      <Component2 :dataset="dataset" />
    </v-col>
  </div>
</template>

<script>
import Component1 from "./Component1";
import Component2 from "./Component2";

export default {
  components: {
    Component1,
    Component2    
  },
  data() {
    return { dataset: { count: 0 } };
  }
};
</script>

Component1とComponent2をImportする

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?