Vuejsコンポーネントのメソッドセクション内でラムダ式を使用しています。Vuejs Arrow関数が2番目の文をトリガーしない
この例は、 です。私はalertyou()
をトリガーし、アラートを取得し、「OK」をクリックします。その後、私はthis.activated
と表示されるvue開発ツールではtrue
になります。
export default {
name: 'HelloWorld',
data() {
return {
msg: 'Welcome to Your Vue.js App',
activated: false
}
},
methods: {
alertme:() => { alert('Clicked'); this.activated = false; },
alertyou() {
alert('Alert You');
this.activated = true
}
}
}
ただし、alertme
ラムダをトリガーするボタンをクリックすると、警告メッセージが表示されたら、[いいえ]をクリックします。しかし、その後、これは有効です。
ここで何が起こっているのは、これがラムダの制限ですか?ラムダごとに1つのステートメントだけトリガーできますか?それとも警報が発せられたら、これは範囲を扱わなければならないのでしょうか?
いいえ、矢印の機能は、1つのステートメントだけを含むことに限定されません。 console.logのアラートを変更して再度テストします。アラートを使用しないでください。これはブロッキング文です。 – WaldemarIce
@WaldemarIce 'alert'は何も実行されないようブロックしません。問題は、矢印関数を使用すると親スコープに 'this'をバインドします。これはVueインスタンスではありません。彼は 'alertme'を通常の関数として定義するべきです(あるいは' alertyou'と同じように省略形を使用してください)。彼は明示的に「this」にバインドする必要はありません。 – thanksd
@thanksd上記のコメントを読んでください。彼はどこに問題があるのかを知っています。そしてあなたは間違っています。警告はコードブロック文です。これを呼び出すと、コードの実行は文字通り一時停止します。 – WaldemarIce