通常 Vue では state (data
)を single source of truth (唯一の情報源) とする形をとるのですが、子コンポーネントの prop に入れた値からデータを取得しようとするのは理由があるのでしょうか?
前者の場合、以下のようになります。
html
1 <el-button
2 :type="google"
3 round
4 @click="changeColor(google)"
5 >
追記
コンポーネントが、自身の prop の値を直接変更してはいけません。ではクリック時に type を変えるにはどうするかというと、type prop は親コンポーネントから与えられるので、親がクリックイベント発生時に type の値を変更します。
クリックするたびにtype
がsuccess
とprimary
の間を切り替わるコードの例です。
Codesandbox Demo
html
1<template>
2 <div>
3 <el-button :type="buttonType" @click="toggleButtonType">Button</el-button>
4 </div>
5</template>
6
7<script>
8export default {
9 data() {
10 return {
11 buttonType: 'success',
12 }
13 },
14 methods: {
15 toggleButtonType() {
16 this.buttonType = this.buttonType === 'success' ? 'primary' : 'success'
17 },
18 },
19}
20</script>
公式ガイドも読むといいと思います。
単方向のデータフロー - Vue
全てのプロパティは、子プロパティと親プロパティの間に、 単方向のバインディング を形成します: 親のプロパティが更新されると、子へと流れ落ちていきますが、それ以外の方法でデータが流れることはありません。これによって、子コンポーネントが誤って親の状態を変更することがなく、これによって、アプリのデータフローを 理解しづらい 可能性のある子コンポーネントによる誤った親の状態変更から、防ぎます。
また、親コンポーネントが更新されるたびに、子コンポーネント内の全てのプロパティが最新の値へと更新されます。これは、子コンポーネント内において、プロパティを 変化させない ことを意味しています。それを行った場合、 Vue は コンソールにて警告します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/30 09:09
2018/11/30 09:15
2018/12/02 05:17
2018/12/02 08:36