Piszemy pierwszy komponent w projekcie Vue. Musimy się przez to przegryźć, aby do ciekawszych tematów móc się dokopać. Do dzieła.
Ok, tworzymy plik FirstComponent.vue w components i ustalamy zawartość:
<template>
<div class="green">
<h1>{{ msg }}</h1>
</div>
</template>
<script>
export default {
name: 'FirstComponent',
props: {
msg: String
}
}
</script>
<style scoped>
.green {
color: #42b983;
}
</style>
Zakładam że wszystko jasne. W App.vue dodajemy komponent do template:
<template>
<img alt="Vue logo" src="./assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
<FirstComponent msg="My Message" />
</template>
Teraz w tagu script dodajemy import komponentu + dopisujemy do components:
<script>
import HelloWorld from './components/HelloWorld.vue'
import FirstComponent from './components/FirstComponent.vue'
export default {
name: 'App',
components: {
HelloWorld,
FirstComponent
}
}
</script>
Wykonujemy komendę i sprawdzamy, czy działa.
Ok, to był samozamykający się komponent. Teraz dodamy mu slot (swoją drogą podobnie jak template, tag normlanego HTML w wersji 5, komponenty też z HTML5 pochodzą, polecam ogarnąć web components oraz stencil):
<template>
<div class="green">
<h1>{{ msg }}</h1>
<slot></slot>
</div>
</template>
Ok, teraz robimy jakieś wypełnienie tego slotu w App.vue:
<template>
<img alt="Vue logo" src="./assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
<FirstComponent msg="My Message">
<p class="green">And this is slot content</p>
</FirstComponent>
</template>
Odpalamy, działa, w dodatku style łapie nasz slot po swoim komponencie. Z drugiej strony poza komponentem ich nie ma, możemy sprawdzić:
<template>
<img alt="Vue logo" src="./assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
<FirstComponent msg="My Message">
<p class="green">And this is slot content</p>
</FirstComponent>
<p class="green">I dont have green class</p>
</template>
Więcej Vue już niedługo.