Associazione di attributi

Completato

È già stato illustrato come visualizzare i dati in una pagina usando la sintassi Handlebars ({{}}). Ma il testo non è l'unica parte della pagina che potrebbe dover essere dinamica.

Molti dei valori in una pagina vengono impostati tramite attributi. Fortunatamente, Vue.js consente di associare i dati agli attributi tramite le direttive.

Direttive

Le direttive sono attributi riconosciuti da Vue.js. Consentono di impostare in modo dinamico i valori degli attributi HTML. Tutte le direttive iniziano con v-.

v-bind

La direttiva principale è v-bind. Consente di associare un valore di dati a un attributo. È possibile usarla per impostare in modo dinamico il nome di una classe, l'origine di un'immagine o uno stile.

Per usare la direttiva, inserire v-bind e un segno di due punti (:) davanti all'attributo che si vuole impostare. Quindi, per impostare l'attributo src per un'immagine, usare v-bind:src="value". Il valore dell'attributo viene quindi valutato in modo simile a come viene valutato quando si usa la sintassi {{ }}.

Il codice seguente genera l'elemento HTML <img src="./media/sample.jpg">.

<div id="app">
    <img v-bind:src="imageSource" />
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
    Vue.createApp({
        data() {
            return {
                imageSource: './media/sample.jpg'
            }
        }
    }).mount('#app');
</script>

La proprietà imageSource è disponibile per il modello perché viene restituita dal metodo data(). Viene quindi associata all'attributo src dell'elemento immagine.

Nota

Non è necessario mantenere un riferimento all'oggetto usato per l'app, ma è possibile chiamare createApp immediatamente, seguito da mount, come illustrato in precedenza.

Associazione in forma abbreviata

Si è visto come usare la direttiva v-bind nell'app Vue per associare i dati a un attributo. È possibile digitare questa direttiva anche in forma abbreviata. Ad esempio, anziché digitare v-bind:attribute, si può digitare :attribute. Questa sintassi abbreviata permette di risparmiare alcuni caratteri.

Nell'esempio relativo all'origine dell'immagine associata è possibile usare la sintassi abbreviata nel modo seguente.

<div id="app">
    <img v-bind:src="imageSource" />
</div>

Ora è possibile digitare il codice seguente.

<div id="app">
    <img :src="imageSource" />
</div>

Suggerimento

L'uso della sintassi abbreviata :attribute è generalmente considerata una procedura migliore rispetto all'uso di v-bind:attribute.

Classe e stile

Uno degli attributi più comuni che è possibile impostare per un elemento HTML è class o style. Per eseguire l'associazione a questi attributi, si può usare v-bind:class e v-bind:style oppure, in forma abbreviata, :class e :style.

Oggetti classe

Si supponga di avere un'applicazione con due classi: centered e active. Ecco come è possibile usare queste classi in HTML.

<div class='centered active'>Hello, Vue!</div>

Questo esempio, tuttavia, è statico. Se si vuole avere la possibilità di modificare i dati, è possibile usare un'associazione. Vue consente l'associazione non solo per una stringa, ma anche per un oggetto.

Ecco come è possibile disattivare il valore statico centered active per una proprietà diversa:

<div id="app">
    <div :class="classObject">Hello, Vue!</div>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
    Vue.createApp({
        data() {
            return {
                classObject: {
                    centered: true,
                    active: true
                }
            }
        }
    }).mount('#app');
</script>

La proprietà di dati classObject include due proprietà con valori booleani. I valori booleani consentono di abilitare o disabilitare classi specifiche. L'impostazione di centered su false restituirebbe <div class="active"> perché active sarebbe l'unica proprietà ancora true.

Nota

Agli oggetti classe si applicano le regole di denominazione JavaScript. Se quindi il nome della classe usa un trattino, come in center-text, inserire il nome tra virgolette ('center-text': true) quando si aggiunge la proprietà.

Oggetti stile

L'impostazione di stili in CSS implica la creazione di raccolte di coppie chiave/valore. La rappresentazione dello stile tramite un oggetto JavaScript è relativamente naturale. In Vue.js è possibile creare oggetti stile per impostare lo stile.

Ad esempio, per impostare il colore di sfondo (background-color) dello stile di un elemento HTML, si può usare il codice seguente.

<div id="app">
    <div :style="styleObject">Hello, Vue!</div>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
    Vue.createApp({
        data() {
            return {
                styleObject: {
                    'background-color': 'red'
                }
            }
        }
    }).mount('#app');
</script>