Vue.js to framework często używany z Laravelem. W dodatku łatwy do nauczenia i można z niego korzystać do różnej wielkości projektów, tak małych jak i większych. Uczymy się podstaw Vue. Do dzieła.

Ok, będziemy potrzebować trzech rzeczy. Pierwsza – CDN z atrybutem defer oraz odnośnik do pliku JavaScript:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://unpkg.com/vue@3.4.9/dist/vue.global.js" defer></script> 
    <script src="app2.js" defer></script>
</head>

Druga – root element naszej apki, do którego zrobimy mount. Musi mieć id albo coś, co można złapać selektorem:

<body>
    <div id="app">
    </div>
</body>
</html>

Trzecia – instancja apki + mount w pliku JavaScript:

const app = Vue.createApp({
    data() {
      return {
        name: "John Doe",
        age: 30
      };
    },
  });
  
  app.mount('#app');

Data to obiekt danych, które są dostępne dla naszej apki. Do mount idzie selektor root elementu. Teraz możemy wyświetlić sobie te zmienne za pomocą interpolacji:

<div id="app">
        <p>Hello {{name}}. You are {{age}} years old!</p>
</div>

Możemy też używać wyrażeń w tych nawiasach:

<div id="app">
        <p>Hello {{name.toUpperCase()}}. You are {{age * 12}} months old!</p>
</div>

Dodajmy url do naszych zmiennych:

const app = Vue.createApp({
    data() {
      return {
        name: "John Doe",
        age: 30,
        link: "https://www.google.com"
      };
    },
  });
  
  app.mount('#app');

Żeby bindować wartość atrybutu HTML (nie text content) z wartością z data potrzebna nam dyrektywa v-bind:

<div id="app">
        <p>Hello {{name.toUpperCase()}}. You are {{age * 12}} months old!</p>
        <p>Visit <a v-bind:href="link">Google</a></p>
    </div>

Istnieje też zapis skrócony:

<div id="app">
        <p>Hello {{name.toUpperCase()}}. You are {{age * 12}} months old!</p>
        <p>Visit <a :href="link">Google</a></p>
</div>

Ok, dodajmy czysty HTML gdzieś do data:

const app = Vue.createApp({
    data() {
      return {
        name: "John Doe",
        age: 30,
        link: "https://www.google.com",
        raw: "<strong>Hello World!</stron>"
      };
    },
  });
  
  app.mount('#app');

Do wyświetlania czystego HTML służy dyrektywa v-html:

<div id="app">
        <p>Hello {{name.toUpperCase()}}. You are {{age * 12}} months old!</p>
        <p>Visit <a :href="link">Google</a></p>
        <p v-html="raw"></p>
</div>

Ok, będziemy mieć Vue na oku i powoli go sobie przyswajać.