vue computedでarrow関数を使ってもうまくいかない
2023-09-16 05:06:12
質問
Vueを学習中ですが、computedプロパティでarrow関数を使用する際に問題に直面しました。
私の元のコードは正常に動作します(以下のスニペットを参照してください)。
new Vue({
el: '#app',
data: {
turnRed: false,
turnGreen: false,
turnBlue: false
},
computed:{
switchRed: function () {
return {red: this.turnRed}
},
switchGreen: function () {
return {green: this.turnGreen}
},
switchBlue: function () {
return {blue: this.turnBlue}
}
}
});
.demo{
width: 100px;
height: 100px;
background-color: gray;
display: inline-block;
margin: 10px;
}
.red{
background-color: red;
}
.green{
background-color: green;
}
.blue{
background-color: blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.4/vue.js"></script>
<div id="app">
<div class="demo" @click="turnRed = !turnRed" :class="switchRed"></div>
<div class="demo" @click="turnGreen = !turnGreen" :class="switchGreen"></div>
<div class="demo" @click="turnBlue = !turnBlue" :class="switchBlue"></div>
</div>
しかし、computedプロパティのメソッドを変更しても、色は変わりません(ただし、turnRedの値は正常にtrueとfalseの間を切り替えています)。
これは私のコードです。
computed:{
switchRed: () => {
return {red: this.turnRed}
},
switchGreen: () => {
return {green: this.turnGreen}
},
switchBlue: () => {
return {blue: this.turnBlue}
}
}
間違った構文を使っていませんか?
どのように解決するのですか?
矢印関数がバインドされないため、このエラーに直面しました。
this
を計算されたプロパティを定義しているvueのインスタンスにバインドしないからです。同じことが、もしあなたが
methods
を矢印関数で定義しても同じです。
インスタンスプロパティやコールバックで矢印関数を使わないでください(例えば
vm.$watch('a', newVal => this.myMethod()))
. 矢印関数は親のコンテキストにバインドされるため、これは期待するようなVueインスタンスにはならずthis.myMethod
は未定義になります。
あなたはそれについて読むことができます はこちら .
関連
-
[解決済み] Access-Control-Allow-Originヘッダーはどのように機能するのですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] 非同期アロー関数のシンタックス
-
[解決済み] ECMAScript 6 オブジェクトを返す矢印関数
-
[解決済み】関数の前のエクスクラメーションマークは何をするのですか?
-
[解決済み】Vueのv-on:clickがコンポーネントに効かない。
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?