Kolejna szybka lekcja na temat Vue, które musimy poznać, aby ruszyć Laravel + Inertia. Do dzieła.

Ok, nasza apka z poziomu markupu:

<div id="app">
        <form @submit="onSubmit" action="https://www.google.com">
            <input type="submit" value="Send"/>
        </form>
</div>

A teraz z poziomu JS:

const app = Vue.createApp({
    methods: {
        onSubmit(){
            alert("Submited")
        }
    },
    
  });
  
app.mount('#app');

Chyba nie będzie zaskoczeniem, że przeniesie nas na Google, choć alert wstrzyma ten proces aż do kliknięcia OK (to też zaskakiwać nie powinno).

Ok, zróbmy aby onSubmit przyjmował event:

const app = Vue.createApp({
    methods: {
        onSubmit(event){
            event.preventDefault();
            alert("Submited")
        }
    },
    
  });
  
app.mount('#app');

Pytanie, jak ten event przekazać. Dwa sposoby:

<div id="app">
        <form @submit="(evt) => onSubmit(evt)" action="https://www.google.com">
            <input type="submit" value="Send"/>
        </form>
</div>

Drugi, lepszy:

 <div id="app">
        <form @submit="onSubmit($event)" action="https://www.google.com">
            <input type="submit" value="Send"/>
        </form>
</div>

Koncept zmiennych specjalnych, odróżniających się od innych zmiennych znakiem dolara jest obecny w wielu frameworkach frontendowych (Vue, Alpine, AngularJS, nie mylić z Angularem).

Zmienna $event to event. Oczywiście inne argumenty też możemy przekazywać w tych nawiasach, a gdy nie przekazujemy żadnych, to decydujemy, albo są nawiasy, albo tylko nazwa metody.

Tylko computed properties NIE MOGĄ mieć nawiasów, ale to nie o nich lekcja. Ok, wywalamy preventDefault:

const app = Vue.createApp({
    methods: {
        onSubmit(){
            alert("Submited")
        }
    },
    
  });
  
app.mount('#app');

Ale nadal chcemy preventDefault. Jak to osiągnąć? Modyfikatorem eventu:

<div id="app">
        <form @submit.prevent="onSubmit" action="https://www.google.com">
            <input type="submit" value="Send"/>
        </form>
    </div>

Modyfikatorów jest dużo, np. sprawdź, czy użytkownik kliknął prawym przyciskiem myszy trzymając ctrl. Są intuicyjne i dobrze w dokumentacji opisane.