Ich verwende einen Lambda-Ausdruck innerhalb des Methodenabschnitts einer Vuejs-Komponente. Das Beispiel ist unter Ich Trigger alertyou()
und erhalten Sie die Warnung, klicken Sie auf OK. Dann in den Vue-Entwickler-Tools sehe ich this.activated
wird true
.Vuejs Arrow Funktion löst keine zweite Anweisung aus
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
}
}
}
Allerdings, wenn ich auf die Schaltfläche klicken, die die alertme
Lambda auslöst. Ich bekomme die Warnmeldung, klicken Sie auf OK. Aber dann bleibt das aktiviert.
Was ist los hier ist dies eine Einschränkung mit Lambdas? Können Sie nur eine Aussage pro Lambda auslösen? Oder muss das mit dem Umfang umgehen, sobald eine Warnung ausgelöst wird?
Nein, Pfeilfunktionen sind nicht darauf beschränkt, nur eine Anweisung zu enthalten. Ändern Sie den Alarm für console.log und testen Sie ihn erneut. Verwenden Sie keine Warnung, da die Anweisung blockiert wird. – WaldemarIce
@WaldemarIce 'alert' wird nichts daran hindern, ausgeführt zu werden. Das Problem besteht darin, dass die Verwendung einer Pfeilfunktion "this" an den übergeordneten Bereich bindet, der nicht die Vue-Instanz ist. Er sollte "alertme" als eine normale Funktion definieren (oder die Kurzschrift verwenden, wie er es bei "alertyou" getan hat). Er muss nicht explizit an "das" binden. – thanksd
@thanksd Lesen Sie die obigen Kommentare. Ich weiß, wo er ein Problem hat - mit dem Umfang. Und du liegst falsch, Alert ist Code Blocking-Anweisung. Wenn Sie es aufrufen, wird die Codeausführung buchstäblich pausiert. – WaldemarIce