<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/index.php?action=history&amp;feed=atom&amp;title=Vue_-_Basic_Concepts</id>
	<title>Vue - Basic Concepts - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/index.php?action=history&amp;feed=atom&amp;title=Vue_-_Basic_Concepts"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;action=history"/>
	<updated>2026-05-06T14:56:33Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikizone</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25170&amp;oldid=prev</id>
		<title>37.49.72.8: /* Class Attribut */</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25170&amp;oldid=prev"/>
		<updated>2021-01-11T16:23:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Class Attribut&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 11. Januar 2021, 16:23 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l310&quot; &gt;Zeile 310:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 310:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div @click=&amp;quot;selectBox(&amp;#039;A&amp;#039;)&amp;quot; :class=&amp;quot;{demo: true, active: boxSelectedA}&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div @click=&amp;quot;selectBox(&amp;#039;A&amp;#039;)&amp;quot; :class=&amp;quot;{demo: true, active: boxSelectedA}&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Vue akzeptiert ein Objekt in dem man einfach key value Paare übergibt. Ist der value true wird die Klasse gesetzt. wenn also boxSelectedA true ist wird die Klasse active gesetzt. Demo wird immer gessetzt.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Vue akzeptiert ein Objekt in dem man einfach key value Paare übergibt. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#039;&amp;#039;&amp;#039;&lt;/ins&gt;Ist der value true wird die Klasse gesetzt&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#039;&amp;#039;&amp;#039;&lt;/ins&gt;. wenn also boxSelectedA true ist wird die Klasse active gesetzt. Demo wird immer gessetzt.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== class + :class ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== class + :class ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>37.49.72.8</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25111&amp;oldid=prev</id>
		<title>37.49.72.8: /* Computed Properties */</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25111&amp;oldid=prev"/>
		<updated>2021-01-05T19:45:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Computed Properties&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 5. Januar 2021, 19:45 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l236&quot; &gt;Zeile 236:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 236:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== method oder computed ? ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== method oder computed ? ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;computed&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;computed&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* immer dann wenn etwas gerendert werden soll&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* immer dann wenn etwas gerendert werden soll  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* wenn man die Funktion wie eine Eigenschaft nutzt&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* wenn man die Funktion wie eine Eigenschaft nutzt &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(Funktion in einer Interpolation)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* rufe niemals eine computed method auf&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* rufe niemals eine computed method auf&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>37.49.72.8</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25103&amp;oldid=prev</id>
		<title>84.155.179.66: /* Refs - Änderungen auf Abruf verarbeiten */</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25103&amp;oldid=prev"/>
		<updated>2021-01-04T08:27:56Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Refs - Änderungen auf Abruf verarbeiten&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 4. Januar 2021, 08:27 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l395&quot; &gt;Zeile 395:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 395:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Refs - Änderungen auf Abruf verarbeiten ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Refs - Änderungen auf Abruf verarbeiten ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Die Reaktivität von Vue bedeutet, dass bei jeder Änderung eines Wertes Code ausgeführt wird. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;In manche Fällen &lt;/del&gt;z.B. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;wenn der User &lt;/del&gt;ein Input Feld &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ausfüllt und nicht bei &lt;/del&gt;jedem Tastendruck &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;validiert werden soll &lt;/del&gt;möchte man den geänderten Wert erst verarbeiten wenn der User fertig ist.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Die Reaktivität von Vue bedeutet, dass bei jeder Änderung eines Wertes Code ausgeführt wird. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Füllt ein User &lt;/ins&gt;z.B. ein Input Feld &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;aus wird mit &lt;/ins&gt;jedem Tastendruck &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Code ausgeführt. In manche Fällen  &lt;/ins&gt;möchte man den geänderten Wert erst verarbeiten wenn der User fertig ist.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dafür gibt es das ref Attribut. Dies ist ein Vue-spezifisches Attribut. Wenn man es setzt wird bei diesem Element nicht sofort die Reflektionskette in Gang gesetzt. Stattdessen landet der Wert im &amp;#039;&amp;#039;&amp;#039;$refs Objekt&amp;#039;&amp;#039;&amp;#039;. Dies ist ein spezieller Speicher denn man &amp;#039;&amp;#039;&amp;#039;jederzeit manuell auslesen kann&amp;#039;&amp;#039;&amp;#039;. Der Zugriff erfolgt so:&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dafür gibt es das ref Attribut. Dies ist ein Vue-spezifisches Attribut. Wenn man es setzt wird bei diesem Element nicht sofort die Reflektionskette in Gang gesetzt. Stattdessen landet der Wert im &amp;#039;&amp;#039;&amp;#039;$refs Objekt&amp;#039;&amp;#039;&amp;#039;. Dies ist ein spezieller Speicher denn man &amp;#039;&amp;#039;&amp;#039;jederzeit manuell auslesen kann&amp;#039;&amp;#039;&amp;#039;. Der Zugriff erfolgt so:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l419&quot; &gt;Zeile 419:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 419:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;},&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;},&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Templates ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Templates ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Templates bezeichnen den Bereich des DOM den eine App kontrolliert.&amp;#039;&amp;#039;&amp;#039; In der Praxis holt man sich das Template oft über den Selector in .mount().&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Templates bezeichnen den Bereich des DOM den eine App kontrolliert.&amp;#039;&amp;#039;&amp;#039; In der Praxis holt man sich das Template oft über den Selector in .mount().&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>84.155.179.66</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25059&amp;oldid=prev</id>
		<title>37.49.72.8: /* Links */</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25059&amp;oldid=prev"/>
		<updated>2020-12-28T10:47:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Links&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 28. Dezember 2020, 10:47 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Links ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Links ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  [[Vue.js]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  [[Vue.js]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; [[Vue - Components]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  [[Vue - Snippets]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  [[Vue - Snippets]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>37.49.72.8</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25056&amp;oldid=prev</id>
		<title>37.49.72.8 am 28. Dezember 2020 um 10:42 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25056&amp;oldid=prev"/>
		<updated>2020-12-28T10:42:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 28. Dezember 2020, 10:42 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Links ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; [[Vue.js]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; [[Vue - Snippets]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Übersicht ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Übersicht ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Deklarativer Ansatz&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Deklarativer Ansatz&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>37.49.72.8</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25055&amp;oldid=prev</id>
		<title>37.49.72.8 am 28. Dezember 2020 um 10:41 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25055&amp;oldid=prev"/>
		<updated>2020-12-28T10:41:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;amp;diff=25055&amp;amp;oldid=25054&quot;&gt;Änderungen zeigen&lt;/a&gt;</summary>
		<author><name>37.49.72.8</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25054&amp;oldid=prev</id>
		<title>37.49.72.8: Die Seite wurde neu angelegt: „* Deklarativer Ansatz * Data Option / Function * Methods Option / Object * Outputting Data mit ** Interpolation {{}} ** Bindings v-bind:property=&quot;myVal&quot; ** Met…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Vue_-_Basic_Concepts&amp;diff=25054&amp;oldid=prev"/>
		<updated>2020-12-28T10:37:44Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „* Deklarativer Ansatz * Data Option / Function * Methods Option / Object * Outputting Data mit ** Interpolation {{}} ** Bindings v-bind:property=&amp;quot;myVal&amp;quot; ** Met…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;* Deklarativer Ansatz&lt;br /&gt;
* Data Option / Function&lt;br /&gt;
* Methods Option / Object&lt;br /&gt;
* Outputting Data mit&lt;br /&gt;
** Interpolation {{}}&lt;br /&gt;
** Bindings v-bind:property=&amp;quot;myVal&amp;quot;&lt;br /&gt;
** Methods&lt;br /&gt;
** JavaScript Objects&lt;br /&gt;
* this &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// create App&lt;br /&gt;
const app = Vue.createApp();&lt;br /&gt;
// mount a html region&lt;br /&gt;
// app.mount(&amp;#039;cssSelector&amp;#039;);&lt;br /&gt;
app.mount(&amp;#039;#myId&amp;#039;); // Vue controls now this id in the DOM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
const app = Vue.createApp({&lt;br /&gt;
  // DATA FUNCTION can hold key val pairs&lt;br /&gt;
  data() { //or data: function(){...}&lt;br /&gt;
    return{ // data always returns an object&lt;br /&gt;
      myVar: &amp;#039;Learn Vue&amp;#039;,// can store keys with vals of every type(bool, object, string...)&lt;br /&gt;
      myVar2: &amp;#039;Master Vue&amp;lt;, &lt;br /&gt;
      myHTML: &amp;#039;&amp;lt;h3&amp;gt;HTML Code&amp;lt;/h3&amp;gt;&amp;#039;, // use v-html to output html code&lt;br /&gt;
      myLink: &amp;#039;https://viewjs.org&amp;#039;&lt;br /&gt;
    }; &lt;br /&gt;
  }&lt;br /&gt;
  // METHODS OBJECT HOLDS FUNCTIONS&lt;br /&gt;
  methods: {&lt;br /&gt;
    outputGoal(){&lt;br /&gt;
      const randomNumber = Math.random();&lt;br /&gt;
      if (randomNumber &amp;lt; 0.5) {return &amp;#039;Learn Vue&amp;#039;;}&lt;br /&gt;
      else {return this.myVar2} // &amp;#039;this&amp;#039; works because vue merges all data and methods in a global vue object&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;myId&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Interpolation&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;{{ myVar }}&amp;lt;/p&amp;gt; &amp;lt;!-- Interpolation outputs &amp;quot;Learn Vue&amp;quot; --&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Binding&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Use bindings to set attributes. I.e. set the href attribute. {{myLink}} wouldn&amp;#039;t work inside of tags.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Learn more &amp;lt;a v-bind:href=&amp;quot;myLink&amp;quot;&amp;gt;about Vue&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;{{ outputGoal() }}&amp;lt;/p&amp;gt;&amp;lt;!-- functions or simple js expresseions like 1+1 work to --&amp;gt;&lt;br /&gt;
&amp;lt;p v-html=&amp;quot;myHTML&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Beispiel sind einige der Basiskonzepte zu sehen.&lt;br /&gt;
&lt;br /&gt;
==== data() Objekt ====&lt;br /&gt;
Die Funnktion data(){} ist eine Funktion die alle Properties initialisiert. Die Funnktion gibt ein Objekt mit allen Eigenschaften zurück: data(){ return {prop1: &amp;#039;hallo&amp;#039;} }. Die Properties können Zahlen, Strings, Objekte... sein.&lt;br /&gt;
&lt;br /&gt;
==== methods Objekt ====&lt;br /&gt;
Das Objekt methods{} gibt Methoden zurück die man nutzen kann. Es gibt noch computed und watch für ähnliche Aufgaben s.u.&lt;br /&gt;
&lt;br /&gt;
==== Interpolations ====&lt;br /&gt;
Interpolations sind vereinfacht gesagt &amp;#039;&amp;#039;&amp;#039;Platzhalter&amp;#039;&amp;#039;&amp;#039;. Man kann man im HTML Template nutzen um Eigenschaften (oder den Rückgabewert von Funktionen oder auch Ausdrücke) auszugeben.&lt;br /&gt;
 {{ myproperty }}&lt;br /&gt;
 {{ myFunction }} // Referenz auf eine Funktion&lt;br /&gt;
 {{ myFunction() }} // Funktion (wird direkt ausgeführt (vgl. methods, computed, watch)&lt;br /&gt;
 {{ 1 + 1 }}&lt;br /&gt;
Da hier mehr als nur ein Einsetzen stattfindet greift Platzhalter eigentlich zu kurz. Vielmehr verkabelt (bindet) man Teile des Templates dynamisch an Ereignisse, Eigenschaften und Funktionen. &lt;br /&gt;
&lt;br /&gt;
==== Deklarativer Ansatz ====&lt;br /&gt;
Dies bedeutet man &amp;#039;&amp;#039;&amp;#039;deklariert wo etwas passieren&amp;#039;&amp;#039;&amp;#039; soll und Vue prüft selbstständig ob sich etwas verändert hat und irgendwo etwas neu gerendert wird. Beim klassischen Ansatz würde man alles was neu gerendert wird selbst programmieren. In der Praxis setzt man die Interpolations und definiert im HTML Code Bindings und Event Handler und überläßt Vue dann die Überwachung was damit passieren soll.&lt;br /&gt;
&lt;br /&gt;
==== v-bind ====&lt;br /&gt;
Mit v-bind kann man P&amp;#039;&amp;#039;&amp;#039;roperties auch in HTML Attributen nutzen&amp;#039;&amp;#039;&amp;#039;. Interpolations funktionieren nur zwischen HTML-Tags.&lt;br /&gt;
 &amp;lt;a v-bind:href=&amp;quot;myLink&amp;quot;&amp;gt;about Vue&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Shortcut v-bind =====&lt;br /&gt;
v-bind: kann durch : ersetzt werden&lt;br /&gt;
  &amp;lt;a :href=&amp;quot;myLink&amp;quot;&amp;gt;about Vue&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== v-html ====&lt;br /&gt;
Benötigt man wenn &amp;#039;&amp;#039;&amp;#039;reiner HTML Code&amp;#039;&amp;#039;&amp;#039; ausgegeben wird. Interpolations escapen HTML aus Sicherheitsgründen.&lt;br /&gt;
&lt;br /&gt;
==== this ====&lt;br /&gt;
Mit this kann man auf das &amp;#039;&amp;#039;&amp;#039;globale Datenobjekt&amp;#039;&amp;#039;&amp;#039; zugreifen. Man kann damit z.B. in methods auf alle Eigenschaften in data zugreifen. Und diese auch setzten.&lt;br /&gt;
 this.myVar = &amp;#039;Hallo Welt&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Event Handling ===&lt;br /&gt;
==== v-on ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const app = Vue.createApp({&lt;br /&gt;
  data() {&lt;br /&gt;
    return {&lt;br /&gt;
      counter: 0,&lt;br /&gt;
    };&lt;br /&gt;
  },&lt;br /&gt;
  methods:{&lt;br /&gt;
    plus(n){ this.counter = this.counter + n },&lt;br /&gt;
    minus(n){ this.counter = this.counter - n },&lt;br /&gt;
    updateName(event){&lt;br /&gt;
      this.name = event.target.value&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
app.mount(&amp;#039;#events&amp;#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;events&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h2&amp;gt;Events in Action&amp;lt;/h2&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt; We can use expression in v-on:click or use a function from our methods object&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;!-- CLICK EVENT --&amp;gt;&lt;br /&gt;
  &amp;lt;button v-on:click=&amp;quot;plus(5)&amp;quot;&amp;gt;Add 5&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;button v-on:click=&amp;quot;minus(5)&amp;quot;&amp;gt;Substract 5&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Result: {{ counter }}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;!-- INPUT EVENT --&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;text&amp;quot; v-on:input=&amp;quot;updateName&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Hello {{ name }}&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===== v-on Shortcut =====&lt;br /&gt;
v-on: kann durch @ ersetzt werden.&lt;br /&gt;
 v-on:click=&amp;quot;plus(5)&amp;quot;&lt;br /&gt;
 @:click=&amp;quot;plus(5)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== $event ====&lt;br /&gt;
In Eventlistenern kann man automatisch auf das event Argument zugreifen, das der Browser automatisch mitliefert (siehe Beispiel oben). Wenn man allerdings selbst ein Argument übermittelt wird das Event Argument überschrieben. Man kann aber mit dem reservierten Argument $event trotzdem wieder auf das Event Objekt zugreifen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    updateName(event, lastName){&lt;br /&gt;
      this.name = event.target.value + &amp;#039; &amp;#039; + lastName&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;text&amp;quot; v-on:input=&amp;quot;updateName($event,&amp;#039;Schlegel&amp;#039;)&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Hello {{ name }}&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Event Modifiers ====&lt;br /&gt;
Es gibt verschiedene Event Modifier z.B. um sich ein event.preventDefault() zu sparen. Event Modifiers werden mit einem &amp;#039;.&amp;#039; an das Event im HTML angehängt&lt;br /&gt;
 v-on:submit.prevent&lt;br /&gt;
&lt;br /&gt;
 https://vuejs.org/v2/guide/events.html#Event-Modifiers&lt;br /&gt;
===== Click Modifiers =====&lt;br /&gt;
 v-on:click.right&lt;br /&gt;
 v-on:click.middle&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
===== Key Modifiers =====&lt;br /&gt;
 //.enter means fire only if ENTER Key is pressed&lt;br /&gt;
 v-on:keyup.enter=&amp;quot;confirmInput&amp;quot; //possible is all ctrl, shift, page-down...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--also multiple v-on handlers are possible--&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; &lt;br /&gt;
  v-on:input=&amp;quot;updateName&amp;quot; &lt;br /&gt;
  v-on:keyup.enter=&amp;quot;confirmName&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Hello {{ confirmedName }}&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const app = Vue.createApp({&lt;br /&gt;
  data() {&lt;br /&gt;
    return {&lt;br /&gt;
      name: &amp;#039;&amp;#039;,&lt;br /&gt;
      confirmedName: &amp;#039;&amp;#039;,&lt;br /&gt;
    };&lt;br /&gt;
  },&lt;br /&gt;
  methods:{&lt;br /&gt;
    updateName(event, lastName){&lt;br /&gt;
      this.name = event.target.value&lt;br /&gt;
    },&lt;br /&gt;
    confirmName(){&lt;br /&gt;
      this.confirmedName = this.name &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
app.mount(&amp;#039;#events&amp;#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Two way binding ===&lt;br /&gt;
Bei Input Feldern möchten wir oft einerseits &lt;br /&gt;
 1. Eine data Property mit mit der User Eingabe setzen&lt;br /&gt;
 2. Eine data Property auslesen und im value Attribut setzen. &lt;br /&gt;
Das bedeutet wir müssen das Input Feld auf zwei Wegen verbinden&lt;br /&gt;
&lt;br /&gt;
==== Beispiel Reset Button ====&lt;br /&gt;
Das Input Feld bekommt 2 Binds&lt;br /&gt;
&lt;br /&gt;
 1. Value Attribut wird an das &amp;quot;name&amp;quot; Property gebuden.&lt;br /&gt;
 2. Input Event wird an die Funktion &amp;quot;setName&amp;quot; gebunden.&lt;br /&gt;
&lt;br /&gt;
Wird von irgendwoher (in unserem Fall vom Reset Knopf) die Eigenschaft &amp;quot;name&amp;quot; verändert, so wird auch der value im Input automatisch verändert.&lt;br /&gt;
In Vanilla JS müßten wir alle Stellen in denen name gesetzt ist von Hand zurücksetzen müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; v-bind:value=&amp;quot;name&amp;quot; v-on:input=&amp;quot;setName($event)&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Your Name: {{ name }}&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;button v-on:click=&amp;quot;reset()&amp;quot;&amp;gt;Reset&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//...&lt;br /&gt;
  data() {&lt;br /&gt;
    return { name: &amp;#039;&amp;#039; };&lt;br /&gt;
  },&lt;br /&gt;
  methods: {&lt;br /&gt;
    setName(event) { this.name = event.target.value; },&lt;br /&gt;
    reset() { this.name = &amp;#039;&amp;#039;; }&lt;br /&gt;
  }&lt;br /&gt;
//...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===== v-model two-way-binding =====&lt;br /&gt;
Two Way Binding bedeutet also die Kombination aus &amp;#039;&amp;#039;&amp;#039;Eventhandling&amp;#039;&amp;#039;&amp;#039; (Ereignisbehandlung = Aufrufen einer Funktion bei einem Event) &amp;#039;&amp;#039;&amp;#039;und Databinding&amp;#039;&amp;#039;&amp;#039; (Die Bindung des Wertes an eine Eigenschaft). Dieser Fall tritt sehr oft auf, daher gibt es für dieses Muster eine eigene Direktive.&lt;br /&gt;
&lt;br /&gt;
Statt&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; v-bind:value=&amp;quot;name&amp;quot; v-on:input=&amp;quot;setName($event)&amp;quot;&amp;gt;&lt;br /&gt;
schreiben wir nur&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; v-model=&amp;quot;name&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Die Funktion setName die wir oben haben entfällt komplett.&amp;#039;&amp;#039;&amp;#039; Denn die Eigenschaft &amp;quot;name&amp;quot; wird mit two-way-binding sowohl gesetzt als auch abgerufen. Im Two Way Binding ist das Model also mit Getter und Setter enthalten. &lt;br /&gt;
&lt;br /&gt;
=== Computed Properties ===&lt;br /&gt;
Wir können Interpolations auch mit Funktionen nutzen:&lt;br /&gt;
&amp;lt;pre&amp;gt; {{ myFunction() }} &amp;lt;/pre&amp;gt;&lt;br /&gt;
Das kann allerdings in &amp;#039;&amp;#039;&amp;#039;Performance Problemen&amp;#039;&amp;#039;&amp;#039; enden. &amp;#039;&amp;#039;&amp;#039;Da Vue nicht weiß welche Properties in der Funktion angepasst werden&amp;#039;&amp;#039;&amp;#039; führt es diese Funktion bei jeder Änderung von irgendwelchen Properties (in data) aus, auch wenn das gar nicht notwendig ist. Um das zu umgehen gibt es neben &amp;#039;&amp;#039;data&amp;#039;&amp;#039; und &amp;#039;&amp;#039;methods&amp;#039;&amp;#039; noch ein drittes Konigurationsobjekt nämlich &amp;#039;&amp;#039;computed&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Im computed Objekt können wir wie in methods &amp;#039;&amp;#039;&amp;#039;Funktionen definieren&amp;#039;&amp;#039;&amp;#039;. Diese Funktionen werden aber &amp;#039;&amp;#039;&amp;#039;benutzt wie Eigenschaften&amp;#039;&amp;#039;&amp;#039;. Daher sollte man sie auch wie Properties benennen also z.b. nicht renderFullname sondern fullname. Im HTML Code darf sich auch nicht aufgerufen werden sondern man zeigt nur auf die Funktion also &amp;#039;&amp;#039;&amp;#039;NICHT {{ fullname() }} sondern nur {{ fullname }}&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Per Konzept ruft Vue diese Funktionen dann selbst auf wenn notwendig.&lt;br /&gt;
 &lt;br /&gt;
==== method oder computed ? ====&lt;br /&gt;
computed&lt;br /&gt;
* immer dann wenn etwas gerendert werden soll&lt;br /&gt;
* wenn man die Funktion wie eine Eigenschaft nutzt&lt;br /&gt;
* rufe niemals eine computed method auf&lt;br /&gt;
&lt;br /&gt;
method&lt;br /&gt;
* Wenn eine Methode immer ausgeführt werden soll sobald eine Änderung eintritt. Dann kannst du eine Methode direkt in eine Interpolation schreiben.&lt;br /&gt;
* Für bindings. Also Funktionen die bei Events aufgerufen werden.&lt;br /&gt;
* Tatsächliche Funktionalität die von anderen Methoden aufgerufen wird.&lt;br /&gt;
&lt;br /&gt;
=== Watchers ===&lt;br /&gt;
Watchers sind ein 4. Konfigurationsobjekt und haben Ähnlichkeit mit den Computed Properties. Ein Watcher überwacht die Änderung einer Eigenschaft und wird dann ausgeführt.&lt;br /&gt;
Eine Watcherfunktion bekommt immer den Namen einer Eigenschaft.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
data{&lt;br /&gt;
  counter: 0;&lt;br /&gt;
},&lt;br /&gt;
watch{&lt;br /&gt;
    counter(value){&lt;br /&gt;
      if (value &amp;gt; 50) this.counter = 0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wann immer sich die Eigenschaft counter verändert wird die Funktion counter() aufgerufen.&lt;br /&gt;
&lt;br /&gt;
Der Watcher Funktion kann automatisch der aktuellste und der vorigen Wert der Eigenschaftsvariablen übergeben werden.&lt;br /&gt;
 counter(oldValue, newValue){ ... }&lt;br /&gt;
&lt;br /&gt;
Die Stärken von Watchern sind die Überwachung von Zuständen. Du nutzt sie immer dann wenn etwas ausgeführt werden soll wenn ein bestimmter Zustand eintrifft. Computed Properties haben ihre Stärke eher dann wenn einfach nur Werte bei jedem Event verändert werden müssen aber ein v-model nicht ausreicht.&lt;br /&gt;
&lt;br /&gt;
=== methods vs computed vs watch ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Einsatzbereich von Methods &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Wenn in Interpolations&amp;#039;&amp;#039;&amp;#039; {{ functionName() }} werden Sie bei &amp;#039;&amp;#039;&amp;#039;jeder Änderung, egal welcher Property&amp;#039;&amp;#039;&amp;#039; ausgeführt. -&amp;gt; Nur bei Aufgaben die bei jeder Änderung ausgeführt werden sollen&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Aufgaben die von Events via v-bind aufgerufen werden. Also bei der &amp;#039;&amp;#039;&amp;#039;Ereignisbehandlung&amp;#039;&amp;#039;&amp;#039;.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Allgemeine Funktionen ohne bestimmten Bezug zu einem Event o.ä. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Einsatzbereich von Computed Properties &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Aufgaben die bei &amp;#039;&amp;#039;&amp;#039;Änderungen von einer oder mehrere Eigenschaften ausgeführt werden, aber nicht bei allen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Aufgaben die von mehreren Eigenschaften abhängen&amp;#039;&amp;#039;&amp;#039; (z.B. Vor- ODER Nachname wird geändert). Hier kann man mit CP Code im Vergleich zu Watchern sparen.&lt;br /&gt;
* Bessere Performance wenn nicht alle Eigenschaften berücksichtigt werden müssen (im Vergleich zu Methods).&lt;br /&gt;
* werden nicht direkt in Interpolations aufgerufen sondern nur referenziert ( {{ myComputed }} aber nicht {{ myComputed() }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Einsatzbereich von Watchern&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Aufgaben die &amp;#039;&amp;#039;&amp;#039;bei bestimmten Ereignissen&amp;#039;&amp;#039;&amp;#039; ausgerführt werden. Sprich: Eigenschaften auf einen bestimmten Zustand hin überwachen.&lt;br /&gt;
* Bei einem bestimmten Zustand einen http Request ausführen&lt;br /&gt;
* Timer starten, resetten&lt;br /&gt;
* Etwas in localStorage speichern&lt;br /&gt;
* Werden nicht direkt im Template verwendet (nur die Property)&lt;br /&gt;
* Können Properties aber auch computed Properties überwachen&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Styling ===&lt;br /&gt;
&lt;br /&gt;
==== Style Attribut ====&lt;br /&gt;
In den Attributen style und class erlaubt Vue eine besondere Syntax. Man kann ein Objekt mit einem Style direkt mit v-bind (oder :) einsetzen.&lt;br /&gt;
 v-bind:style=&amp;quot;{color:green}&amp;quot;&lt;br /&gt;
bei Eigenschaften mit Bindestrich kann man camelCase verwenden:&lt;br /&gt;
 v-bind:style=&amp;quot;&amp;#039;border-color&amp;#039;: red&amp;quot;&lt;br /&gt;
 v-bind:style=&amp;quot;borderColor: red&amp;quot;&lt;br /&gt;
Auch Ausdrücke sind wie immer bei Vue erlaubt. Hier ein Beispiel (beachte auch v-bind: wird durch : ersetzt)&lt;br /&gt;
 :style=&amp;quot;{borderColor: selectedBoxA ? &amp;#039;red&amp;#039; : &amp;#039;#ccc&amp;#039; }&amp;quot;&lt;br /&gt;
In diesem Beispiel gehen wir davon aus dass wir eine Property &amp;#039;selectedBoxA haben, die auf true oder false steht.&lt;br /&gt;
&lt;br /&gt;
==== Class Attribut ====&lt;br /&gt;
Vue kann auch eine Klasse setzten. Das ist in der Regel auch die bessere Vorgehensweise, da man Inline Styles schlecht überschreiben kann. Auch hier sind Ausdrücke möglich. Wir gehen in den Beispielen davon aus, dass wir eine Eigenschaft &amp;#039;&amp;#039;&amp;#039;selectedBoxA&amp;#039;&amp;#039;&amp;#039; haben die true oder false ist und eine Funktion &amp;#039;&amp;#039;selectBox()&amp;#039;&amp;#039; die für uns diese Eigenschaft auf true setzen kann.&lt;br /&gt;
 :class=&amp;quot;selectedBoxA ? &amp;#039;active demo&amp;#039; : &amp;#039;demo&amp;#039;&amp;quot;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div @click=&amp;quot;selectBox(&amp;#039;A&amp;#039;)&amp;quot; :class=&amp;quot;selectedBoxA ? &amp;#039;active demo&amp;#039; : &amp;#039;demo&amp;#039;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Auch für class gibt es eine spezielle Syntax die das Leben einfacher macht:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div @click=&amp;quot;selectBox(&amp;#039;A&amp;#039;)&amp;quot; :class=&amp;quot;{demo: true, active: boxSelectedA}&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Vue akzeptiert ein Objekt in dem man einfach key value Paare übergibt. Ist der value true wird die Klasse gesetzt. wenn also boxSelectedA true ist wird die Klasse active gesetzt. Demo wird immer gessetzt.&lt;br /&gt;
&lt;br /&gt;
===== class + :class =====&lt;br /&gt;
Noch einfacher wird es, wenn man auch das class Attribut und das v-bind class Attribut zusammen einsetzt. Vue merged dann das dynamisch gebundene mit dem statischen class Attribut.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div @click=&amp;quot;selectBox(&amp;#039;A&amp;#039;)&amp;quot; class=&amp;quot;demo&amp;quot; :class=&amp;quot;{active: boxSelectedA}&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Class Object aus computed property =====&lt;br /&gt;
Du kannst auch die Logik komplett auslagern. Dazu gibst du das Object am Besten aus einem computed Property zurück:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div @click=&amp;quot;selectBox(&amp;#039;A&amp;#039;)&amp;quot; class=&amp;quot;demo&amp;quot; :class=&amp;quot;boxAClasses&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
computed:{ &lt;br /&gt;
  boxAClasses(){ &lt;br /&gt;
    return{ active: this.boxSelectedA } &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hier kann man auch komplexere Logik abbilden.&lt;br /&gt;
&lt;br /&gt;
===== Array Schreibweise / mehrere Class Objekte =====&lt;br /&gt;
Du kannst auch mehrere Objekte nutzen. Dazu kommen Sie in ein Array:&lt;br /&gt;
 :class=&amp;quot;[&amp;#039;demo&amp;#039;, {active: boxSelectedA}]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Conditions &amp;amp; Loops ===&lt;br /&gt;
==== v-if / v-else / v-else-if ====&lt;br /&gt;
Mit Conditions kann man Teile des DOM anzeigen oder entfernen. Wichtig: die Teile werden tatsächlich entfernt und hinzugefügt und nicht einfach versteckt.&lt;br /&gt;
&lt;br /&gt;
In data() haben wir ein array definiert: &lt;br /&gt;
 goals: []&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p v-if=&amp;quot;goals.length === 0&amp;quot;&amp;gt;No goals have been added yet - please start adding some!&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul v-else&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Goal&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wenn goals Inhalt hat wird die Liste angezeigt. Das ist hier natürlich nur mäßig sinnvoll, da wir die Liste hier nicht dynamisch füllen, erklärt aber das Prinzip.&lt;br /&gt;
&lt;br /&gt;
Außerdem gibt es noch v-else-if das man genauso wie das v-else nach v-if einbauen kann. Funktioniert wie in anderen Sprachen.&lt;br /&gt;
&lt;br /&gt;
==== v-show ====&lt;br /&gt;
Mit v-show werden DOM Elemente gezeigt oder versteckt. Die Anwendung ist analog zu v-else. v-show kann nur alleine verwendet werden. Versteckte Elemente werden nur per Inline-Style versteckt und bleiben im DOM. I.d.R. verwendet man v-if. v-show kann man nutzen wenn ein Element sehr oft ein und ausgeblendet wird. Dabei kann v-show etwas perfomanter sein. Allerdings auf Kosten von unnötigem Ballast im DOM.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;p v-show=&amp;quot;goals.length === 0&amp;quot;&amp;gt;No goals have been added yet - please start adding some!&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== v-for ====&lt;br /&gt;
Dies ist die Entsprechung des JavaScript for loops. &lt;br /&gt;
JavaScript:&lt;br /&gt;
 for(const goals of goal)&lt;br /&gt;
Vue:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;li v-for=&amp;quot;goal in goals&amp;quot;&amp;gt;{{goal}}&amp;lt;/li&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wie in JavaScript kann man auch of statt in nehmen. Ist aber wenig üblich. Mit in kann man direkt auf einzelne Element zugreifen kann. Wenn goals ein Array mit Strings ist:&lt;br /&gt;
 goals:[&amp;#039;one&amp;#039;, &amp;#039;two&amp;#039;, &amp;#039;three&amp;#039;]&lt;br /&gt;
erzeugt vue hier&lt;br /&gt;
 &amp;lt;li&amp;gt;one&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;two&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;three&amp;lt;/li&amp;gt;&lt;br /&gt;
===== for loop - index =====&lt;br /&gt;
Vue kann auch den Index des Arrays als zweiten Parameter übergeben.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;li v-for=&amp;quot;(goal, i) in goals&amp;quot;&amp;gt;#{{i}} {{goal}}&amp;lt;/li&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== for loop mit Objekten =====&lt;br /&gt;
For funktioniert analog auch mit Objekten. Im Beispiel packen wir das Objekt einfach mit in den Loop. In der Praxis würde man dies eher im JavaScript Code erzeugen. Die Variablen item und key sind hier ebenfalls frei wählbar. Das erste Argument bekommt den Wert, das Zweite den Schlüssel.&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;li v-for=&amp;quot;(item, key) in {color:&amp;#039;red&amp;#039;, taste: &amp;#039;sweet&amp;#039;, fruit: &amp;#039;cherry&amp;#039;}&amp;quot;&amp;gt; {{key}}: {{item}} &amp;lt;/li&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Als drittes Argument könnte man auch noch den index bekommen. &lt;br /&gt;
 (value, key, index)&lt;br /&gt;
&lt;br /&gt;
===== for loop mit Zahlenbereich =====&lt;br /&gt;
Auch ranges sind möglich:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;li v-for=&amp;quot;n in 10&amp;quot;&amp;gt;{{ n }}&amp;lt;/li&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Hinweise ====&lt;br /&gt;
Nutze nicht v-if und v-for auf dem selben Element. Stattdessen nutze einen v-if wrapper (also das if Element um das v-for legen)&lt;br /&gt;
&lt;br /&gt;
==== key Attribut ====&lt;br /&gt;
Achtung: Wenn Vue ein Listenelement entfernt werden die folgenden dynamischen Inhalte einfach ein Element nach vorne verschoben. Evtl. statische Inhalte verbleiben. Das kann seltsames Verhalten erzeugen sobald mehr als der dynamische Tag im geloopten Element ist. Vue macht dies aus Performance Gründen so. Damit man dies umgehen kann gibt es das key Attribut. Das ist ein spezielles Attribut, in das mein einen eindeutigen Identifier für das aktuelle Element schreibt (z.B. aus der Datenbank) Mit hilfe dieses keys kann Vue die Liste effizient managen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wenn du for verwendest nutze immer das key Attribut!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;li :key=&amp;quot;goal&amp;quot; v-for=&amp;quot;(goal, i) in goals&amp;quot; @click=&amp;quot;removeGoal(i)&amp;quot;&amp;gt;#{{i}} {{goal}}&amp;lt;/li&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Refs - Änderungen auf Abruf verarbeiten ===&lt;br /&gt;
Die Reaktivität von Vue bedeutet, dass bei jeder Änderung eines Wertes Code ausgeführt wird. In manche Fällen z.B. wenn der User ein Input Feld ausfüllt und nicht bei jedem Tastendruck validiert werden soll möchte man den geänderten Wert erst verarbeiten wenn der User fertig ist.&lt;br /&gt;
&lt;br /&gt;
Dafür gibt es das ref Attribut. Dies ist ein Vue-spezifisches Attribut. Wenn man es setzt wird bei diesem Element nicht sofort die Reflektionskette in Gang gesetzt. Stattdessen landet der Wert im &amp;#039;&amp;#039;&amp;#039;$refs Objekt&amp;#039;&amp;#039;&amp;#039;. Dies ist ein spezieller Speicher denn man &amp;#039;&amp;#039;&amp;#039;jederzeit manuell auslesen kann&amp;#039;&amp;#039;&amp;#039;. Der Zugriff erfolgt so:&lt;br /&gt;
 this.$refs.[refname].value&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;app&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;text&amp;quot; @input=&amp;quot;saveText&amp;quot;&amp;gt; &amp;lt;!-- ohne ref --&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;text&amp;quot; ref=&amp;quot;userText&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;button @click=&amp;quot;setText&amp;quot;&amp;gt;Set Text&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;{{ message }}&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
saveInput(event) {&lt;br /&gt;
  this.currentUserInput = event.target.value; // ohne ref&lt;br /&gt;
},&lt;br /&gt;
setText() {&lt;br /&gt;
  this.message = this.currentUserInput; // ohne ref&lt;br /&gt;
  this.message = this.$refs.userText.value; // mit ref&lt;br /&gt;
  // console.dir(this.$refs.userText);&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Templates bezeichnen den Bereich des DOM den eine App kontrolliert.&amp;#039;&amp;#039;&amp;#039; In der Praxis holt man sich das Template oft über den Selector in .mount().&lt;br /&gt;
&lt;br /&gt;
Man kann aber auch in der Konfiguration mit dem template Objekt, der Inhalt eines Template direkt im JS erzeugt werden. Trotzdem muss es noch gemounted werden, damit Vue weiß wo auf der Seite die App gerendert werden soll.&lt;br /&gt;
&lt;br /&gt;
=== Mehrere Apps ===&lt;br /&gt;
Man kann auch mehrere Apps auf einer Seite haben, die dann unterschiedliche Templates kontrollieren. &lt;br /&gt;
* Apps sind voneinander getrennt. Eine App hat keine Zugriff auf die Daten der anderen App.&lt;br /&gt;
* Ein Template soll nur von einer App kontrolliert werden.&lt;br /&gt;
&lt;br /&gt;
=== Hooks / Vue Lifecycle ===&lt;br /&gt;
Im Lifecycle einer App treten einige definierte Ereignisse auf, in die man auch per Hook eingreifen kann. Das sind die Hooks einer Vue App:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  methods: {&lt;br /&gt;
    saveInput(event) {&lt;br /&gt;
      this.currentUserInput = event.target.value;&lt;br /&gt;
    },&lt;br /&gt;
    setText() {&lt;br /&gt;
      // this.message = this.currentUserInput;&lt;br /&gt;
      this.message = this.$refs.userText.value;&lt;br /&gt;
      // console.dir(this.$refs.userText);&lt;br /&gt;
    },&lt;br /&gt;
  },&lt;br /&gt;
  beforeCreate() {&lt;br /&gt;
    console.log(&amp;#039;beforeCreate()&amp;#039;);&lt;br /&gt;
  },&lt;br /&gt;
  created() {&lt;br /&gt;
    console.log(&amp;#039;created()&amp;#039;);&lt;br /&gt;
  },&lt;br /&gt;
  beforeMount() {&lt;br /&gt;
    console.log(&amp;#039;beforeMount()&amp;#039;);&lt;br /&gt;
  },&lt;br /&gt;
  mounted() {&lt;br /&gt;
    console.log(&amp;#039;mounted()&amp;#039;);&lt;br /&gt;
  },&lt;br /&gt;
  beforeUpdate() {&lt;br /&gt;
    console.log(&amp;#039;beforeUpdate()&amp;#039;);&lt;br /&gt;
  },&lt;br /&gt;
  updated() {&lt;br /&gt;
    console.log(&amp;#039;updated()&amp;#039;);&lt;br /&gt;
  },&lt;br /&gt;
  beforeUnmount() {&lt;br /&gt;
    console.log(&amp;#039;beforeUnmount()&amp;#039;);&lt;br /&gt;
  },&lt;br /&gt;
  unmounted() {&lt;br /&gt;
    console.log(&amp;#039;unmounted()&amp;#039;);&lt;br /&gt;
  },&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>37.49.72.8</name></author>
	</entry>
</feed>