- Vue – v-model and Two-Way Binding
What `v-model` desugars to on an input, its `.lazy`, `.number` and `.trim` modifiers, and then the part that matters: `v-model` on your own component. The `modelValue` prop and `update:modelValue` event the demo app's tag editor implements by hand, named models for multiple bindings, and `defineModel` — the 3.4+ shorthand that collapses all of it into one line.
- Vue – Events and Emits
Passing messages back up. `defineEmits` and why declaring events is worth the line, emitting with a payload, event modifiers — `.prevent`, `.stop`, `.once`, `.self` — and key modifiers like the `@keydown.enter.prevent` the tag editor uses, plus why a child emits a request rather than reaching up and changing something itself.
- Vue – Props
Passing data down. `defineProps` with an object declaration, types, `required`, `default` and the function form every object and array default needs, why props are one-way and what to do instead of mutating one, prop casing between template and script, and reading a prop in script versus in a template.
- Vue – Components
Breaking a page into pieces. Importing and using a component with `<script setup>` and no registration step, naming and casing in templates, where components live in a project that has grown past a dozen of them, and how the demo app splits `ui/`, `public/` and `admin/` so that a component's folder tells you who is allowed to use it.
- Vue – Conditional and List Rendering
`v-if` versus `v-show` and which one to reach for, `v-else-if` and `v-else`, `v-for` over arrays and objects, and `:key` — what it is for, why an index is usually the wrong choice, and the class of bug that only appears once you reorder or delete. Also why `v-if` and `v-for` on the same element is a mistake Vue now warns about.