import{v as a,b as s,F as e,X as n,L as o,R as l}from"./chunks/framework.e4334dac.js";const t=l('<h1 id="template-syntax" tabindex="-1">La Sintassi del Template <a class="header-anchor" href="#template-syntax" aria-label="Permalink to &quot;La Sintassi del Template {#template-syntax}&quot;">​</a></h1><p>Vue utilizza una sintassi di template basata su HTML che ti permette in maniera dichiarativa di legare il DOM renderizzato con i dati dell&#39;istanza del componente sottostante. Tutti i template Vue sono HTML sintatticamente valido che possono essere letti da parser e da browser conformi alle specifiche HTML.</p><p>Sotto il cofano, Vue compila i template in codice JavaScript altamente ottimizzato. Combinato con il sistema di reattività, Vue può capire in maniera intelligente il numero minimo di componenti da ri-renderizzare e applicare il minimo numero di modifiche al DOM quando cambia lo stato dell&#39;app.</p><p>Se hai familiarità con i concetti del Virtual DOM e preferisci la potenza di JavaScript, con il supporto opzionale a JSX, puoi anche <a href="/guide/extras/render-function.html">scrivere direttamente le render function</a> invece dei template. Tuttavia, nota che non godono dello stesso livello di ottimizzazioni durante la compilazione dei template.</p><h2 id="text-interpolation" tabindex="-1">Interpolazione del Testo <a class="header-anchor" href="#text-interpolation" aria-label="Permalink to &quot;Interpolazione del Testo {#text-interpolation}&quot;">​</a></h2><p>La forma più basilare di data binding è l&#39;interpolazione del testo utilizzando la sintassi &quot;Mustache&quot; (doppie parentesi graffe):</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">span</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;">Messaggio: </span><span style="color:#89DDFF;">{{</span><span style="color:#A6ACCD;"> msg </span><span style="color:#89DDFF;">}}&lt;/</span><span style="color:#F07178;">span</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>Il tag mustache verrà sostituito con il valore della proprietà msg <a href="/guide/essentials/reactivity-fundamentals.html#declaring-reactive-state">dall&#39;istanza del componente corrispondente</a>. Sarà anche aggiornato ogni volta che la proprietà msg cambia.</p><h2 id="raw-html" tabindex="-1">HTML puro <a class="header-anchor" href="#raw-html" aria-label="Permalink to &quot;HTML puro {#raw-html}&quot;">​</a></h2><p>Le doppie parentesi graffe interpretano i dati come testo normale, non HTML. Per produrre vero HTML, avrai bisogno di utilizzare la <a href="/api/built-in-directives.html#v-html">direttiva <code>v-html</code></a>:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">p</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;">Usando l&#39;interpolazione del testo: </span><span style="color:#89DDFF;">{{</span><span style="color:#A6ACCD;"> rawHtml </span><span style="color:#89DDFF;">}}&lt;/</span><span style="color:#F07178;">p</span><span style="color:#89DDFF;">&gt;</span></span>\n<span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">p</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;">Using v-html directive: </span><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">span</span><span style="color:#89DDFF;"> </span><span style="color:#C792EA;">v-html</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">rawHtml</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;&lt;/</span><span style="color:#F07178;">span</span><span style="color:#89DDFF;">&gt;&lt;/</span><span style="color:#F07178;">p</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div>',11),i=l('<p>Qui incontriamo qualcosa di nuovo. L&#39;attributo <code>v-html</code> che vedi qui sopra si chiama <strong>direttiva</strong> (directive). Le direttive sono prefissate con <code>v-</code> per indicare che sono attributi speciali forniti da Vue, e come avrai indovinato, applicano un comportamento reattivo speciale al DOM renderizzato. Con questo codice stiamo dicendo &quot;Mantieni l&#39;HTML interno di questo elemento sempre aggiornato con la proprietà <code>rawHtml</code> dell&#39;istanza attiva corrente&quot;.</p><p>Il contenuto dello <code>span</code> verrà sostituito con il valore della proprietà rawHtml e interpretato come HTML grezzo - i data binding saranno ignorati. Nota che non è possibile utilizzare <code>v-html</code> per comporre frammenti di template, poiché Vue non è un motore di templating basato su stringhe. Si preferisce, invece, l&#39;uso dei componenti come unità fondamentali per la riutilizzazione e la composizione dell&#39;interfaccia utente.</p><div class="warning custom-block"><p class="custom-block-title">Avviso di Sicurezza</p><p>La renderizzazione dinamica di HTML arbitrario sul tuo sito web può essere molto pericolosa in quanto può facilmente portare a <a href="https://en.wikipedia.org/wiki/Cross-site_scripting" target="_blank" rel="noreferrer">vulnerabilità XSS</a>. Utilizza <code>v-html</code> solo su contenuti di fiducia e <strong>mai</strong> su contenuti forniti dall&#39;utente.</p></div><h2 id="attribute-bindings" tabindex="-1">Associazioni di Attributi (binding) <a class="header-anchor" href="#attribute-bindings" aria-label="Permalink to &quot;Associazioni di Attributi (binding) {#attribute-bindings}&quot;">​</a></h2><p>Le parentesi graffe non possono essere utilizzate all&#39;interno degli attributi HTML. Si può usare, invece, la <a href="/api/built-in-directives.html#v-bind">direttiva <code>v-bind</code></a>:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;"> </span><span style="color:#C792EA;">v-bind</span><span style="color:#89DDFF;">:</span><span style="color:#C792EA;">id</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">dynamicId</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;&lt;/</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>La direttiva <code>v-bind</code> indica a Vue di mantenere sincronizzato l&#39;attributo <code>id</code> dell&#39;elemento con la proprietà dinamica <code>dynamicId</code> del componente. Se il valore associato è <code>null</code> o <code>undefined</code>, l&#39;attributo verrà rimosso dall&#39;elemento renderizzato.</p><h3 id="shorthand" tabindex="-1">Forma abbreviata <a class="header-anchor" href="#shorthand" aria-label="Permalink to &quot;Forma abbreviata {#shorthand}&quot;">​</a></h3><p>dato che <code>v-bind</code> è utilizzato così di frequente, ha una sintassi abbreviata dedicata:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;"> :</span><span style="color:#C792EA;">id</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">dynamicId</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;&lt;/</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>Gli attributi che iniziano con <code>:</code> possono sembrare un po&#39; diversi dall&#39;HTML normale, ma in realtà è un carattere valido per i nomi degli attributi e tutti i browser supportati da Vue possono analizzarlo correttamente. Non appaiono, inoltre, nel markup finale renderizzato. La sintassi abbreviata è opzionale, ma probabilmente la apprezzerai quando imparerai qualcosa in più sul suo utilizzo più avanti.</p><blockquote><p>Per il resto della guida, negli esempi di codice utilizzeremo la sintassi abbreviata, dato che è l&#39;uso più comune per gli sviluppatori Vue.</p></blockquote><h3 id="boolean-attributes" tabindex="-1">Attributi Booleani <a class="header-anchor" href="#boolean-attributes" aria-label="Permalink to &quot;Attributi Booleani {#boolean-attributes}&quot;">​</a></h3><p>Gli <a href="https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes" target="_blank" rel="noreferrer">Attributi Booleani</a> sono attributi che possono indicare valori veri / falsi con la loro presenza su un elemento. Ad esempio,<a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/disabled" target="_blank" rel="noreferrer"><code>disabled</code></a> è uno degli attributi booleani più comunemente utilizzati.</p><p>In questo caso <code>v-bind</code> funziona un po&#39; diversamente:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">button</span><span style="color:#89DDFF;"> :</span><span style="color:#C792EA;">disabled</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">isButtonDisabled</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;">Button</span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">button</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>L&#39;attributo <code>disabled</code> sarà incluso se <code>isButtonDisabled</code> ha un <a href="https://developer.mozilla.org/en-US/docs/Glossary/Truthy" target="_blank" rel="noreferrer">valore truthy</a>. Sarà incluso anche se il valore è una stringa vuota, mantenendo la coerenza con <code>&lt;button disabled=&quot;&quot;&gt;</code>. Per altri <a href="https://developer.mozilla.org/en-US/docs/Glossary/Falsy" target="_blank" rel="noreferrer">valori falsy</a> l&#39;attributo sarà omesso.</p><h3 id="dynamically-binding-multiple-attributes" tabindex="-1">Associazione Dinamica di Attributi Multipli <a class="header-anchor" href="#dynamically-binding-multiple-attributes" aria-label="Permalink to &quot;Associazione Dinamica di Attributi Multipli {#dynamically-binding-multiple-attributes}&quot;">​</a></h3><p>Se hai un oggetto JavaScript che rappresenta attributi multipli che assomiglia a questo:</p><div class="composition-api"><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#C792EA;">const</span><span style="color:#A6ACCD;"> objectOfAttrs </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>\n<span class="line"><span style="color:#A6ACCD;">  </span><span style="color:#F07178;">id</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">container</span><span style="color:#89DDFF;">&#39;</span><span style="color:#89DDFF;">,</span></span>\n<span class="line"><span style="color:#A6ACCD;">  </span><span style="color:#F07178;">class</span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">wrapper</span><span style="color:#89DDFF;">&#39;</span></span>\n<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre></div></div><div class="options-api"><div class="language-js"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#82AAFF;">data</span><span style="color:#A6ACCD;">() </span><span style="color:#89DDFF;">{</span></span>\n<span class="line"><span style="color:#F07178;">  </span><span style="color:#89DDFF;font-style:italic;">return</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span></span>\n<span class="line"><span style="color:#F07178;">    objectOfAttrs</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">{</span></span>\n<span class="line"><span style="color:#F07178;">      id</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">container</span><span style="color:#89DDFF;">&#39;</span><span style="color:#89DDFF;">,</span></span>\n<span class="line"><span style="color:#F07178;">      class</span><span style="color:#89DDFF;">:</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">wrapper</span><span style="color:#89DDFF;">&#39;</span></span>\n<span class="line"><span style="color:#F07178;">    </span><span style="color:#89DDFF;">}</span></span>\n<span class="line"><span style="color:#F07178;">  </span><span style="color:#89DDFF;">}</span></span>\n<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre></div></div><p>Puoi associarli a un singolo elemento utilizzando <code>v-bind</code> senza un argomento:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;"> </span><span style="color:#C792EA;">v-bind</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">objectOfAttrs</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;&lt;/</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><h2 id="using-javascript-expressions" tabindex="-1">Utilizzo delle Espressioni JavaScript <a class="header-anchor" href="#using-javascript-expressions" aria-label="Permalink to &quot;Utilizzo delle Espressioni JavaScript {#using-javascript-expressions}&quot;">​</a></h2><p>Finora abbiamo associato nei nostri template solo semplici chiavi di proprietà ma, all&#39;interno di tutti i data binding, Vue supporta tutta la potenza delle espressioni JavaScript:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">{{</span><span style="color:#A6ACCD;"> number </span><span style="color:#89DDFF;">+</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">1</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">}}</span></span>\n<span class="line"></span>\n<span class="line"><span style="color:#89DDFF;">{{</span><span style="color:#A6ACCD;"> ok </span><span style="color:#89DDFF;">?</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">SI</span><span style="color:#89DDFF;">&#39;</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">NO</span><span style="color:#89DDFF;">&#39;</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">}}</span></span>\n<span class="line"></span>\n<span class="line"><span style="color:#89DDFF;">{{</span><span style="color:#A6ACCD;"> message</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">split</span><span style="color:#A6ACCD;">(</span><span style="color:#89DDFF;">&#39;&#39;</span><span style="color:#A6ACCD;">)</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">reverse</span><span style="color:#A6ACCD;">()</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">join</span><span style="color:#A6ACCD;">(</span><span style="color:#89DDFF;">&#39;&#39;</span><span style="color:#A6ACCD;">) </span><span style="color:#89DDFF;">}}</span></span>\n<span class="line"></span>\n<span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;"> :</span><span style="color:#C792EA;">id</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;`</span><span style="color:#C3E88D;">list-</span><span style="color:#89DDFF;">${</span><span style="color:#A6ACCD;">id</span><span style="color:#89DDFF;">}`&quot;</span><span style="color:#89DDFF;">&gt;&lt;/</span><span style="color:#F07178;">div</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>Queste espressioni verranno valutate come JavaScript nello scope dei dati nell&#39;istanza del componente corrente.</p><p>Nei template Vue le espressioni JavaScript possono essere utilizzate nelle seguenti posizioni:</p><ul><li>All&#39;interno delle interpolazioni di testo (mustache)</li><li>Nel valore dell&#39;attributo di qualsiasi direttiva Vue (attributi speciali che iniziano con <code>v-</code>)</li></ul><h3 id="expressions-only" tabindex="-1">Singole espressioni <a class="header-anchor" href="#expressions-only" aria-label="Permalink to &quot;Singole espressioni {#expressions-only}&quot;">​</a></h3><p>Un&#39;espressione è un pezzo di codice che può essere valutato per ottenere un valore. Un semplice test è verificare se può essere utilizzato dopo <code>return</code>.</p><p>Pertanto, il seguente codice <strong>NON</strong> funzionerà:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">&lt;!-- questa è un&#39;istruzione, non un&#39;espressione: --&gt;</span></span>\n<span class="line"><span style="color:#89DDFF;">{{</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">var</span><span style="color:#A6ACCD;"> a </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">1</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">}}</span></span>\n<span class="line"></span>\n<span class="line"><span style="color:#676E95;font-style:italic;">&lt;!-- nemmeno il controllo di flusso funzionerà , usa espressioni ternarie --&gt;</span></span>\n<span class="line"><span style="color:#89DDFF;">{{</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;font-style:italic;">if</span><span style="color:#A6ACCD;"> (ok) </span><span style="color:#89DDFF;">{</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;font-style:italic;">return</span><span style="color:#F07178;"> </span><span style="color:#A6ACCD;">message</span><span style="color:#F07178;"> </span><span style="color:#89DDFF;">}</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">}}</span></span></code></pre></div><h3 id="calling-functions" tabindex="-1">Chiamata di Funzioni <a class="header-anchor" href="#calling-functions" aria-label="Permalink to &quot;Chiamata di Funzioni {#calling-functions}&quot;">​</a></h3><p>È possibile chiamare un metodo esposto da un componente all&#39;interno di un&#39;espressione di binding:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">time</span><span style="color:#89DDFF;"> :</span><span style="color:#C792EA;">title</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#82AAFF;">toTitleDate</span><span style="color:#89DDFF;">(</span><span style="color:#A6ACCD;">date</span><span style="color:#89DDFF;">)</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;"> :</span><span style="color:#C792EA;">datetime</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">date</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span></span>\n<span class="line"><span style="color:#A6ACCD;">  </span><span style="color:#89DDFF;">{{</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">formatDate</span><span style="color:#A6ACCD;">(date) </span><span style="color:#89DDFF;">}}</span></span>\n<span class="line"><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">time</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>Le funzioni chiamate all&#39;interno delle espressioni di binding verranno chiamate ogni volta che il componente si aggiorna, quindi accertati che non abbiano alcun effetto collaterale, come modificare i dati o innescare operazioni asincrone.</p></div><h3 id="restricted-globals-access" tabindex="-1">Accesso Limitato alle Globali <a class="header-anchor" href="#restricted-globals-access" aria-label="Permalink to &quot;Accesso Limitato alle Globali {#restricted-globals-access}&quot;">​</a></h3><p>Le espressioni del template sono isolate e hanno accesso solo a una <a href="https://github.com/vuejs/core/blob/main/packages/shared/src/globalsAllowList.ts#L3" target="_blank" rel="noreferrer">lista limitata delle Globali</a>. La lista espone le globali native usate comunemente come <code>Math</code> e <code>Date</code>.</p><p>Le Globali (oggetti, funzioni) non incluse nella lista, ad esempio le proprietà aggiunte dall&#39;utente alla <code>window</code>, non saranno accessibili nelle espressioni del template. Puoi comunque definire esplicitamente delle globali aggiuntive per tutte le espressioni di Vue, aggiungendole a <a href="/api/application.html#app-config-globalproperties"><code>app.config.globalProperties</code></a>.</p><h2 id="directives" tabindex="-1">Le Direttive <a class="header-anchor" href="#directives" aria-label="Permalink to &quot;Le Direttive {#directives}&quot;">​</a></h2><p>Le direttive sono attributi speciali con il prefisso <code>v-</code>. Vue fornisce un numero di <a href="/api/built-in-directives.html">direttive native</a>, tra cui <code>v-html</code> e <code>v-bind</code> che abbiamo introdotto in precedenza.</p><p>I valori degli attributi delle direttive dovrebbero essere singole espressioni JavaScript (ad eccezione di <code>v-for</code>, <code>v-on</code> e <code>v-slot</code>, che saranno presentati nell relative sezioni in seguito). Il compito di una direttiva è applicare reattivamente gli aggiornamenti al DOM quando il valore della sua espressione cambia. Prendiamo come esempio <a href="/api/built-in-directives.html#v-if"><code>v-if</code></a>:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">p</span><span style="color:#89DDFF;"> </span><span style="color:#C792EA;">v-if</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">seen</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;">Ora mi vedi</span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">p</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>Qui, la direttiva <code>v-if</code> può rimuovere / inserire l&#39;elemento <code>&lt;p&gt;</code> in base alla veridicità del valore dell&#39;espressione <code>seen</code>.</p><h3 id="arguments" tabindex="-1">Arguments <a class="header-anchor" href="#arguments" aria-label="Permalink to &quot;Arguments {#arguments}&quot;">​</a></h3><p>Alcune direttive possono accettare un &quot;argomento&quot;, indicato da due punti dopo il nome della direttiva. Ad esempio, la direttiva <code>v-bind</code> viene utilizzata per aggiornare in maniera reattiva un attributo HTML:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;"> </span><span style="color:#C792EA;">v-bind</span><span style="color:#89DDFF;">:</span><span style="color:#C792EA;">href</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">url</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> ... </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;">&gt;</span></span>\n<span class="line"></span>\n<span class="line"><span style="color:#676E95;font-style:italic;">&lt;!-- shorthand --&gt;</span></span>\n<span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;"> :</span><span style="color:#C792EA;">href</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">url</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> ... </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>Qui <code>href</code> è l&#39;argomento, che indica alla direttiva <code>v-bind</code> di collegare l&#39;attributo <code>href</code> dell&#39;elemento al valore dell&#39;espressione <code>url</code>. Nella forma abbreviata, tutto ciò che precede l&#39;argomento (cioè <code>v-bind:</code>) è condensato in un singolo carattere <code>:</code>.</p><p>Un altro esempio è la direttiva <code>v-on</code> che ascolta gli eventi del DOM:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;"> </span><span style="color:#C792EA;">v-on</span><span style="color:#89DDFF;">:</span><span style="color:#C792EA;">click</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">doSomething</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> ... </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;">&gt;</span></span>\n<span class="line"></span>\n<span class="line"><span style="color:#676E95;font-style:italic;">&lt;!-- shorthand --&gt;</span></span>\n<span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;"> @</span><span style="color:#C792EA;">click</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">doSomething</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> ... </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>Qui l&#39;argomento è il nome dell&#39;evento da ascoltare: <code>click</code>. <code>v-on</code> ha una corrispondente forma abbreviata, ovvero il carattere <code>@</code>. Più avanti parleremo nel dettaglio anche della gestione degli eventi.</p><h3 id="dynamic-arguments" tabindex="-1">Argomenti Dinamici <a class="header-anchor" href="#dynamic-arguments" aria-label="Permalink to &quot;Argomenti Dinamici {#dynamic-arguments}&quot;">​</a></h3><p>È possibile utilizzare anche un&#39;espressione JavaScript come argomento di direttiva, racchiudendola tra parentesi quadre:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">&lt;!--</span></span>\n<span class="line"><span style="color:#676E95;font-style:italic;">Nota che ci sono alcune limitazioni all&#39;uso di espressioni nell&#39;argomento,</span></span>\n<span class="line"><span style="color:#676E95;font-style:italic;">come spiegato nelle sezioni &quot;Vincoli sul Valore dell&#39;Argomento Dinamico&quot; e &quot;Vincoli sulla Sintassi dell&#39;Argomento Dinamico&quot; qui sotto.</span></span>\n<span class="line"><span style="color:#676E95;font-style:italic;">--&gt;</span></span>\n<span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;"> </span><span style="color:#C792EA;">v-bind:</span><span style="color:#89DDFF;">[</span><span style="color:#C792EA;">attributeName</span><span style="color:#89DDFF;">]=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">url</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> ... </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;">&gt;</span></span>\n<span class="line"></span>\n<span class="line"><span style="color:#676E95;font-style:italic;">&lt;!-- shorthand --&gt;</span></span>\n<span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;"> :[</span><span style="color:#C792EA;">attributeName</span><span style="color:#89DDFF;">]=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">url</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> ... </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>Qui <code>attributeName</code> verrà valutato dinamicamente come un&#39;espressione JavaScript e il suo valore generato verrà utilizzato come valore finale per l&#39;argomento. Ad esempio, se l&#39;istanza del tuo componente ha una proprietà dati, <code>attributeName</code>, il cui valore è <code>&quot;href&quot;</code>, allora questo binding sarà equivalente a <code>v-bind:href</code>.</p><p>Allo stesso modo puoi utilizzare argomenti dinamici per collegare un handler (gestore) ad un nome di evento dinamico:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;"> </span><span style="color:#C792EA;">v-on:</span><span style="color:#89DDFF;">[</span><span style="color:#C792EA;">eventName</span><span style="color:#89DDFF;">]=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">doSomething</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> ... </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;">&gt;</span></span>\n<span class="line"></span>\n<span class="line"><span style="color:#676E95;font-style:italic;">&lt;!-- shorthand --&gt;</span></span>\n<span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;"> @[</span><span style="color:#C792EA;">eventName</span><span style="color:#89DDFF;">]=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">doSomething</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>In questo esempio, quando il valore di <code>eventName</code> è <code>&quot;focus&quot;</code>, <code>v-on:[eventName]</code> sarà equivalente a <code>v-on:focus</code>.</p><h4 id="dynamic-argument-value-constraints" tabindex="-1">Vincoli sul Valore dell&#39;Argomento Dinamico <a class="header-anchor" href="#dynamic-argument-value-constraints" aria-label="Permalink to &quot;Vincoli sul Valore dell&#39;Argomento Dinamico {#dynamic-argument-value-constraints}&quot;">​</a></h4><p>Gli argomenti dinamici si aspettano di ricevere (valutare) una stringa, con l&#39;eccezione di <code>null</code>. Il valore speciale <code>null</code> può essere utilizzato per rimuovere esplicitamente il binding. Qualsiasi altro valore non stringa causerà un avviso.</p><h4 id="dynamic-argument-syntax-constraints" tabindex="-1">Vincoli sulla Sintassi dell&#39;Argomento Dinamico <a class="header-anchor" href="#dynamic-argument-syntax-constraints" aria-label="Permalink to &quot;Vincoli sulla Sintassi dell&#39;Argomento Dinamico {#dynamic-argument-syntax-constraints}&quot;">​</a></h4><p>Le espressioni degli argomenti dinamici hanno alcuni vincoli di sintassi perché alcuni caratteri, come spazi e virgolette, non sono validi all&#39;interno dei nomi degli attributi HTML. Ad esempio, il seguente codice è non valido:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">&lt;!-- Questo causerà un avviso (warning) del compilatore.  --&gt;</span></span>\n<span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;"> :[</span><span style="color:#89DDFF;">&#39;</span><span style="color:#C3E88D;">foo</span><span style="color:#89DDFF;">&#39;</span><span style="color:#89DDFF;"> + </span><span style="color:#C792EA;">bar</span><span style="color:#89DDFF;">]=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">value</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> ... </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>Se hai bisogno di passare un argomento dinamico complesso, è probabilmente meglio utilizzare una <a href="./computed.html">computed property</a>, che tratteremo a breve.</p><p>Quando si utilizzano template in-DOM (template scritti direttamente in un file HTML), si dovrebbe anche evitare di nominare le chiavi con caratteri maiuscoli, poiché i browser convertiranno i nomi degli attributi in minuscolo:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;"> :[</span><span style="color:#C792EA;">someAttr</span><span style="color:#89DDFF;">]=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">value</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> ... </span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">a</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>Il codice qui sopra verrà convertito in <code>:[someattr]</code> nei template in-DOM. Se il tuo componente ha una proprietà <code>someAttr</code> invece di <code>someattr</code>, il tuo codice non funzionerà. I template all&#39;interno dei Componenti Single-File <strong>non</strong> sono soggetti a questo vincolo.</p><h3 id="modifiers" tabindex="-1">Modificatori <a class="header-anchor" href="#modifiers" aria-label="Permalink to &quot;Modificatori {#modifiers}&quot;">​</a></h3><p>I modificatori sono speciali suffissi, contrassegnati da un punto, che indicano ad una direttiva di comportarsi in maniera particolare. Ad esempio, il modificatore <code>.prevent</code> indica alla direttiva <code>v-on</code> di usare <code>event.preventDefault()</code> sull&#39;evento innescato:</p><div class="language-template"><button title="Copy Code" class="copy"></button><span class="lang">template</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">&lt;</span><span style="color:#F07178;">form</span><span style="color:#89DDFF;"> @</span><span style="color:#C792EA;">submit</span><span style="color:#89DDFF;">.</span><span style="color:#C792EA;">prevent</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">&quot;</span><span style="color:#A6ACCD;">onSubmit</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;">...</span><span style="color:#89DDFF;">&lt;/</span><span style="color:#F07178;">form</span><span style="color:#89DDFF;">&gt;</span></span></code></pre></div><p>Vedrai altri esempi di modificatori più avanti, <a href="./event-handling.html#event-modifiers">per <code>v-on</code></a> e <a href="./forms.html#modifiers">per <code>v-model</code></a>, quando esploreremo queste funzionalità.</p><p>Ecco, infine, la sintassi completa della direttiva visualizzata:</p><p><img src="/assets/directive.69c37117.png" alt="grafico della sintassi della direttiva"></p>',74),p=JSON.parse('{"title":"La Sintassi del Template","description":"","frontmatter":{},"headers":[{"level":2,"title":"Interpolazione del Testo","slug":"text-interpolation","link":"#text-interpolation","children":[]},{"level":2,"title":"HTML puro","slug":"raw-html","link":"#raw-html","children":[]},{"level":2,"title":"Associazioni di Attributi (binding)","slug":"attribute-bindings","link":"#attribute-bindings","children":[{"level":3,"title":"Forma abbreviata","slug":"shorthand","link":"#shorthand","children":[]},{"level":3,"title":"Attributi Booleani","slug":"boolean-attributes","link":"#boolean-attributes","children":[]},{"level":3,"title":"Associazione Dinamica di Attributi Multipli","slug":"dynamically-binding-multiple-attributes","link":"#dynamically-binding-multiple-attributes","children":[]}]},{"level":2,"title":"Utilizzo delle Espressioni JavaScript","slug":"using-javascript-expressions","link":"#using-javascript-expressions","children":[{"level":3,"title":"Singole espressioni","slug":"expressions-only","link":"#expressions-only","children":[]},{"level":3,"title":"Chiamata di Funzioni","slug":"calling-functions","link":"#calling-functions","children":[]},{"level":3,"title":"Accesso Limitato alle Globali","slug":"restricted-globals-access","link":"#restricted-globals-access","children":[]}]},{"level":2,"title":"Le Direttive","slug":"directives","link":"#directives","children":[{"level":3,"title":"Arguments","slug":"arguments","link":"#arguments","children":[]},{"level":3,"title":"Argomenti Dinamici","slug":"dynamic-arguments","link":"#dynamic-arguments","children":[]},{"level":3,"title":"Modificatori","slug":"modifiers","link":"#modifiers","children":[]}]}],"relativePath":"guide/essentials/template-syntax.md","filePath":"guide/essentials/template-syntax.md"}'),r={name:"guide/essentials/template-syntax.md"},c=Object.assign(r,{setup(l){const p='<span style="color: red">Questo dovrebbe essere rosso.</span>';return(l,r)=>(a(),s("div",null,[t,e("div",{class:"demo"},[e("p",null,"Usando l'interpolazione del testo: "+n(p)),e("p",null,[o("Using v-html directive: "),e("span",{innerHTML:p})])]),i]))}});export{p as __pageData,c as default};
