Skip to content

Kapitel 11: Vue Directive (Teil 4) - Weitere Directive

📗 Lernziel: v-once, v-html, v-pre, v-cloak meistern!


11.1 v-once - Einmalige Rendering

v-once rendert Element und untergeordnete Elemente nur einmal.

Verwendung:

vue
<script setup>
import { ref } from 'vue'

const message = ref('Hallo Vue!')
</script>

<template>
  <!-- Wird nur einmal gerendert -->
  <div v-once>
    {{ message }}
  </div>
  
  <!-- Normal (wird aktualisiert) -->
  <div>
    {{ message }}
  </div>
  
  <button @click="message = 'Aktualisiert!'">Aktualisieren</button>
</template>

Anwendungsfall:

  • Statische Inhalte (Performance-Optimierung)
  • Überschriften, die sich nie ändern

11.2 v-html - HTML einfügen

v-html fügt HTML-Inhalt in ein Element ein.

⚠️ Achtung: XSS-Gefahr! Nur für vertrauenswürdige Inhalte verwenden!

Beispiel:

vue
<script setup>
import { ref } from 'vue'

const htmlContent = ref('<strong style="color: red;">Wichtiger Text</strong>')
const unsafeContent = ref('<script>alert("XSS")</script>')
</script>

<template>
  <!-- ✅ Sicher (vertrauenswürdig) -->
  <div v-html="htmlContent"></div>
  
  <!-- ❌ Gefährlich (unsicher) -->
  <!-- NIEMALS Benutzereingaben mit v-html rendern! -->
  <div v-html="unsafeContent"></div>
</template>

Besser: Verwende Vue-Komponenten oder ( automatische Escaping)!


11.3 v-pre - Überspringen der Kompilierung

v-pre verhindert die Vue-Kompilierung für dieses Element und seine untergeordneten Elemente.

Verwendung:

vue
<template>
  <!-- Vue ignoriert diesen Bereich -->
  <div v-pre>
    {{ Dies wird als normaler Text angezeigt }}
    <span v-if="false">Wird nicht ausgewertet</span>
  </div>
  
  <!-- Normal (Vue kompiliert) -->
  <div>
    {{ message }}
  </div>
</template>

Anwendungsfall:

  • Anzeigen von Vue-Code-Beispielen in Dokumentation
  • Performance-Optimierung für statische Bereiche

11.4 v-cloak - Vermeidung von Flackern

v-cloak versteckt Elemente, bis Vue vollständig geladen ist.

Verwendung:

html
<!-- index.html oder Komponente -->
<style>
  [v-cloak] {
    display: none;
  }
</style>

<div id="app">
  <!-- Versteckt, bis Vue geladen ist -->
  <div v-cloak>
    {{ message }}
  </div>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  const { createApp, ref } = Vue
  
  createApp({
    setup() {
      const message = ref('Hallo Vue!')
      return { message }
    }
  }).mount('#app')
</script>

Hinweis: Bei modernen Build-Tools (Vite, webpack) ist v-cloak meist nicht mehr nötig!


11.5 v-memo - Performance-Optimierung (Neu in Vue 3)

v-memo verhindert die Neurendering eines Elements, wenn sich die angegebenen Abhängigkeiten nicht ändern.

Beispiel:

vue
<script setup>
import { ref } from 'vue'

const items = ref([
  { id: 1, name: 'Apfel', price: 1.0 },
  { id: 2, name: 'Banane', price: 0.5 },
  { id: 3, name: 'Orange', price: 0.8 }
])

const selectedId = ref(1)
</script>

<template>
  <ul>
    <li 
      v-for="item in items" 
      :key="item.id"
      v-memo="[item.id === selectedId]"
    >
      {{ item.name }} - {{ item.price }}€
      <span v-if="item.id === selectedId">← Ausgewählt</span>
    </li>
  </ul>
</template>

Anwendungsfall:

  • Große Listen mit komplexen Inhalten
  • Performance-Optimierung

✅ Zusammenfassung

In diesem Kapitel hast du gelernt:

  • v-once - Einmalige Rendering
  • v-html - HTML einfügen (Vorsicht XSS!)
  • v-pre - Überspringen der Kompilierung
  • v-cloak - Vermeidung von Flackern
  • v-memo - Performance-Optimierung

🎯 Nächster Schritt: In Kapitel 12 lernst du Computed Properties!


← Zurück zu Kapitel 10: v-for (Listen)Weiter zu Kapitel 12: Computed Properties →

Frei für alle Anfänger