Kolejna prosta lekcja o Vue.js. Poznajemy zmienną $refs. Do dzieła.

Markup naszej apki:

<div id="app">
        <input type="text" :value="name" ref="ipt" @input="onInput"/>
        <p>Hello {{name}}</p>
</div>

Mamy tutaj root element (root template) app, input, wartość inputu bindowana do zmiennej name z data, utworzoną referencję do elementu html o nazwie ipt, event listener na event input do metody onInput z methods.

Mamy także interpolację zmiennej name z data.

Ok, apka z poziomu JavaScript:

const app = Vue.createApp({
    data(){
        return {
            name: ""
        };
    },

    methods: {
        onInput(){
           this.name = this.$refs.ipt.value;
        }
    },
    
  });
  
app.mount('#app');

Jak widać korzystamy z referencji przez this.$refs, aby uzyskać dostęp do wartości naszego inputu.

Ok, pobawmy się dalej. Poznajmy v-text:

<div id="app">
        <input type="text" :value="name" ref="ipt" @input="onInput"/>
        <p>Hello <span v-text="name"></span></p>
</div>

Działanie to samo, wartość textContent elementu span bindowana do zmiennej name z data.

Ok, zabawmy się w ukrywanie tego hello, jeśli tekst jest pusty:

<div id="app">
        <input type="text" :value="name" ref="ipt" @input="onInput"/>
        <p v-if="showHello">Hello <span v-text="name"></span></p>
</div>

V-if już znamy, teraz musimy tylko dodać showHello do data oraz utworzyć watchera:

const app = Vue.createApp({
    data(){
        return {
            name: "",
            showHello: false
        };
    },

    methods: {
        onInput(){
           this.name = this.$refs.ipt.value;
        }
    },

    watch: {
        name(value){
            if(value.length > 0)
                this.showHello = true;
            else
                this.showHello = false;
        }
    }
    
  });
  
app.mount('#app');

To najlepszy przykład użycia watchera – obserwuje zmianę name, ale zmienia coś zupełnie innego.