There is no difference between the two, one is just a shorthand for the second.
The v- prefix serves as a visual cue for identifying Vue-specific
attributes in your templates. This is useful when you are using Vue.js
to apply dynamic behavior to some existing markup, but can feel
verbose for some frequently used directives. At the same time, the
need for the v- prefix becomes less important when you are building an
SPA where Vue.js manages every template.
<!-- full syntax -->
<a v-on:click="doSomething"></a>
<!-- shorthand -->
<a @click="doSomething"></a>
Source: official documentation.