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

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

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

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

Nuxt.js

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

JavaScript

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

Q&A

解決済

1回答

1031閲覧

【vue】 click処理で、同じ要素に含まれている属性を引数にしたい。

tokuwgawa

総合スコア45

Vue.js

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

Nuxt.js

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

JavaScript

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

0グッド

0クリップ

投稿2018/11/30 08:16

<template> <div class="creative"> <el-button :type="google" round @click="changeColor(type)" > Google </el-button> </div> </template> <script> export default { data() { return { google: "", } }, methods: { async changeColor(color) { if(color == "") { console.log("toota"); } } } } </script>

現在このようにコードを書いているのですが、
@click="changeColor(type)"で同じ要素にいるtype属性を指定しているのですが、実行して見るとdefineエラーがでてしまいうまくいきません。

どうすれば、同じ要素に含まれている属性を引数にできますか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

通常 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 の値を変更します。

クリックするたびにtypesuccessprimaryの間を切り替わるコードの例です。
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 08:59

編集2018/12/02 08:36
karamarimo

総合スコア2551

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

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

tokuwgawa

2018/11/30 09:09

回答ありがとうございます。 子コンポーネントからデータを取得する理由は、ボタンの色をクリックごとに変更させたいと思い、このような処理にしています。
karamarimo

2018/11/30 09:15

子コンポーネント(el-button)で type prop の値を変えるということですか?
tokuwgawa

2018/12/02 05:17

はい、そのような処理を行いたいと考えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問