Obecnie wszyscy są skupieni na najbardziej modnych frameworkach JS takich jak Angular 2 i React. Ci giganci zajmują większość rynku Front End. Słyszałem trochę o Vue.js, ale dałem mu małą szansę.

Vue.js CLI

Vue.js jest wyposażony w CLI, więc łatwiej jest z nim pracować. Oficjalna strona projektu CLI: https://github.com/vuejs/vue-cli.

Aby zainstalować go na MAC, musisz uruchomić komendę:

<pre class="line-numbers"><code class="language-javascript">sudo npm install -g vue-cli</code></pre>

Aby stworzyć projekt użyłem szablonu webpack:

<pre class="line-numbers"><code class="language-javascript">vue init webpack my-project</code></pre>

Stworzyło mi to prostą strukturę i kolejne instrukcje zostały wylistowane:

Widok Vue.js po inicjalizacji projektu

Zainstaluj Vue.js dev tools

Dla łatwiejszej i lepszej pracy z Vue.js zaleca się używanie Vue dev tools. Oficjalne repozytorium Vue.js dev tools: https://github.com/vuejs/vue-devtools Aby pobrać użyj tego linku: https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd

PHPStorm / WEBStorm i Vue.js

Aby pracować z plikami .vue, dobrze jest zainstalować plugin https://plugins.jetbrains.com/plugin/8057-vue-js

Połączenie z API

Mój test API działa na Node i obsługuje 2 opcje: - listowanie zrzutów ekranu. - robienie zrzutów ekranu

obie są metodami GET.

Zacznijmy od pobierania listy z serwera.

Komponent wywołujący GET na serwerze

Użyłem struktury stworzonej przez VUE CLI i dodałem funkcjonalność do komponentu, który został przez niego stworzony. Aby zacząć pracę z żądaniami HTTP, musisz zainstalować pakiet VueResource.

sudo npm i vue-resource --save

Następnie edytuj main.js:

import Vue from 'vue';
import VueResource from 'vue-resource';
import App from './App';

Vue.use(VueResource);
Vue.http.options.emulateJSON = true;

var vueApp = new Vue({
    el: 'body',
    components: {App},
})

Dodatkowo plik App.vue, który opisuje komponent App, wygląda tak:

<template>
  <div id="app">
    <img class="logo" src="/assets/logo.png">
    <ul>
      <li v-for="(index, item) in items">
        {{ item }}
      </li>
    </ul>
  </div>

</template>

<script>
import Vue from 'vue';

export default {
  data: function(){
    return { items: [ 'ding']};
  },
  ready: function() {
    this.fetchFiles();
  },

  methods: {
    fetchFiles: function() {
      Vue.http.get('http://localhost:8888/list').then((response) => {
        var res = JSON.parse(response.body);
        this.$set('items', res.files);

      }, (response) => {
        console.log(response);
      });
    }
  }
}
</script>

<style>
html {
  height: 100%;
}

body {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
}

#app {
  color: #2c3e50;
  margin-top: -100px;
  max-width: 600px;
  font-family: Source Sans Pro, Helvetica, sans-serif;
  text-align: center;
}

#app a {
  color: #42b983;
  text-decoration: none;
}

.logo {
  width: 100px;
  height: 100px
}
</style>

Najważniejsze dla nas fragmenty kodu to:

  • Dyrektywa, która wyrenderuje naszą listę:
<li v-for="(index, item) in items">
     {{ item }}
</li>
  • Metoda pobierająca dane z serwera:
fetchFiles: function() {
      Vue.http.get('http://localhost:8888/list').then((response) => {
        var res = JSON.parse(response.body);
        this.$set('items', res.files);

      }, (response) => {
        console.log(response);
      });
    }

Ta wersja kodu jest dostępna tutaj: https://github.com/pjsikora/screenshot-maker-fe-vue/commit/1c5fabacc3ed362abe995cf7da3ddfa8f7d1defa

Router

Aby zacząć pracę z routerem, będziesz musiał zainstalować nowy pakiet dostępny pod linkiem https://github.com/vuejs/vue-router. Oficjalna dokumentacja jest dostępna tutaj: https://router.vuejs.org/

Zainstalujmy pakiet:

npm install vue-router

Router dogłębnie

Aby zacząć pracę z routerem, musimy trochę zmienić naszą strukturę. Nasze podejście to stworzenie aplikacji z dwoma linkami: - list - z listą zrzutów ekranu - makescreenshot - z prostym formularzem tworzącym zrzut ekranu

Najpierw musimy stworzyć komponenty dla obu widoków.

Struktura: |- componenents ||- List.vue ||- MakeScreenshot.vue |- main.js

Plik main.js:

import Vue from 'vue';
import VueResource from 'vue-resource';
import VueRouter from 'vue-router';

// Komponenty
import List from './components/List';
import MakeScreenshot from './components/MakeScreenshot';

// Konfiguracja HTTP
Vue.use(VueResource);
Vue.http.options.emulateJSON = true;

var App = Vue.extend({
    template: `
        <div id="app">
          <h1>Screenshot App!</h1>
          <p>
            <a v-link="{ path: '/list' }">Przejdź do Listy</a>
            <a v-link="{ path: '/makescreenshot' }">Zrób zrzut ekranu</a>
          </p>
          <!-- outlet routera -->
          <router-view></router-view>
        </div>
    `
});

// Konfiguracja Routera
Vue.use(VueRouter);
var router = new VueRouter();

router.map({
    '/list': {
        component: List
    },
    '/makescreenshot': {
        component: MakeScreenshot
    }
});

// Uruchom aplikację
router.start(App, 'app');

List.vue

<template>
    <p>To jest lista!</p>
    <ul>
        <li v-for="(index, item) in items">
            {{ item }}
        </li>
    </ul>
</template>
<style>

</style>
<script>
    import Vue from 'vue';

    export default{
        data: function(){
            return { items: [ 'ding']};
        },
        ready: function() {
            this.fetchFiles();
        },

        methods: {
            fetchFiles: function() {
                Vue.http.get('http://localhost:8888/list').then((response) => {
                    var res = JSON.parse(response.body);
                this.$set('items', res.files);

            }, (response) => {
                    console.log(response);
                });
            }
        }
    }
</script>

Podsumowanie

Podstawy Vue.js są raczej proste do opanowania. Routing i żądania HTTP mogłyby być zawarte w głównym pakiecie. Ale może lepiej trzymać je poza rdzeniem i mieć mniejszą bibliotekę. Po tym krótkim projekcie myślę, że Vue.js to bardzo dobry i mały framework i łatwy do nauki. Wygląda w niektórych punktach dość podobnie do Angular 1.

Możesz sprawdzić źródła projektu tutaj: https://github.com/pjsikora/screenshot-maker-fe-vue

Categories

Recent Posts

About Me

Piotr Sikora - Process Automation | AI | n8n | Python | JavaScript

Piotr Sikora

Process Automation Specialist

I implement automation that saves time and money, streamlines operations, and increases the predictability of results. Specializing in process automation, AI implementation, and workflow optimization using n8n, Python, and JavaScript.

n8n Workflows

n8n workflow automation templates

Explore my workflow templates on n8n. Ready-to-use automations for blog management, data collection, and AI-powered content processing.

3Workflow Templates

• Auto-Categorize Blog Posts with AI

• Collect LinkedIn Profiles

• Export WordPress Posts for SEO

Podobne artykuły

Odkryj więcej powiązanych treści

Vue, Vue Router, Vuex z TypeScript - Część 1

Ten artykuł będzie wprowadzeniem jak stworzyć projekt oparty na Typescript używając Vue i Vuex.

Vue.js ScreenshotMaker Część 2: Używanie Jade i zmiennych

Vue.js ScreenshotMaker Część 2: Używanie Jade i zmiennych

Każdy projekt potrzebuje ewolucji. Po komentarzu Petera van Meijgaard wprowadziłem kilka zmian.

Opanuj instalację SASS z tym szybkim przewodnikiem

Czy kiedykolwiek marzyłeś o zmiennych lub funkcjach w CSS? Najprostszym sposobem na ich uzyskanie jest użycie preprocesora takiego jak SASS.