Webrebel

Vue 2 vs. Vue 3

Zakladne rozdiely medzi Vue2 a Vue3 :

  • vytvorenie instancie VUE (create App)

  • eventBus

  • zrusili sa filtre pouzivane cez pipe | (staci prerobit na methods)

  • inline template (toto som este nepouzival)

Zakladna kostra VUE 3

<script>

        import VueComponent from 'cesta_k_suboru/VueComponent.vue';

        export default {

                // vsetky pouzite komponenty vo VUE komponente
                components: {
                        VueComponent,
                },

                // data ktore pouzivana v komponente
                data {
                        return {
                                legend: 'Meno Legendy',
                                newObject: '',
                        }
                },

                // sekcia pri vzniknutom komponnete
                created() {
                        window.eventBus.on('NAZOV_GLOBALNEHO_EVENTU', (event) => (this.newObject = event) )
                },

                // metody a funkcie pouzite v komponente
                methods: {
                        showAlert() {
                                alert('Legenda : ' + this.legend)
                        },
                        formSubmited() {
                                this.$emit('new-object', this.newObject)
                        },
                },

        }
</script>

Events

Eventy si vstavane direktivy vo vue a pouziva sa prefix @

@input

Udalost ked nastane zmena na input fielde

Zrusenie refreshu prehliadaca

@submit.prevent

Nastavenie metody po potvrdeni form

@submit.prevent="newMethod"

Nasledne je potrebne vytvorit vo VUE komponente aj metodu

<script>
        export default {
          methods: {
                newMethod() {
                        alert('FORM submited!')
                },
          },
        }
</script>

Kumunikacia z rodica na potomka

Data z rodica do podradenej komponenty (potomka) sa data posielaju cez props

<vue-component :myName="Meno v premennej myName" />

Kumunikacia z potomka na rodica

V pripade odchytenie eventu potomok vie tuto udalost resp. po odchyteni poslat spravu rodicovi cez $emit

<script>
        export default {
          methods: {
                newMethod(e) {
                        this.$emit('NAZOV_VLASTNEHO_EVENTU', data)
                },
          },
        }
</script>

Po udalisti sa zavola metoda, na ktoru dokaze rodic reagovat po pridani takeho eventu do svojej implementacie komponentu

<vue-component @NAZOV_VLASTNEHO_EVENTU="data = @event" />

<p>
{{ data }}
</p>

Kumunikacia cez EventBus

Kuminikacia cez na seba nezavisle komponenty.

Vo Vue 3 si zrusilo pouzivanie EventBus a odporuca sa pouzit externy package.

Napriek tomu pre velke aplikacie sa odporuca pouzivat VUEX na menezovanie stavov a pod cross velku aplikaciu.

Poznámka

Urcite pri budovani vacsej aplikacie by chcelo pouzit VUEX

EventBus mitt

Na ukazku pouzijeme externu kniznicu mitt

Nainsatlovat

npm insatll mitt

Do app.js alebo main.js je potrebne importovat mitt

import mitt from 'mitt'

window.eventBus = mitt()

Nasledne u podobne ako pri komunikaii s rodicom vieme poslat udalost do Globalneho eventBus-u

window.eventBus.emit('NAZOV_GLOBALNEHO_EVENTU', data)

mixins

V pripade ze sa nas kod bude v aplikacii opakovat 2 a viac krat , je vhodne pre zachovanie REUSABLE pouzit mixins .

Mixins je v podstate vlastna kniznica s datami a funkciami, ktoru vieme jednoducho pouzitv akomkolvek VUE komponente.

Na ukazku jednoducheho filter mixin:

export default {
        data() {
                return {
                        data: [],
                        search: ''
                }
        },
        computed: {
                filteredItems() {
                        return this.data.filter( item => {
                                return item[this.searchColumn]
                                        .toLowerCase()
                                        .includes(this.search.toLowerCase())
                        })
                }
        },
}

Varovanie

Nezabudnite importovat svoje Mixins do komponenty

mixins: [filterMixin]

Moment js

Uprava resp. formatovanie datumu na FE tzn. ze ked zo servera nepride naformatovany cas napr. packagom Carbon. N

Nutne doinstalovat package :

npm install moment

Potom staci do svojeho nejakeho Mixin prihodit funkciu na formatovanie napr. :

..code-block:

    import moment from 'moment'

methods: {
            niceDay(dateTime) {
                    return moment(dateTime).fromNow()
            }
    },

Nasledne v komponente kde mame dotiahnuty mixin , tak staci vo vypise hodnoty zabalit do funkcie {{ niceDay( VALUE ) }}