Środowisko
instalowane razem
npm install --global poi
Nowy folder i dwa pliki:
$ npm install --global poi
$ poi index.js
"montowanie" komponentu, wersja fiddle
template: '<...>'
render () { ... }
"montowanie" komponentu, wersja poi
nazwa zmiennej w pliku
ścieżka/nazwa modułu
SFC - Single File Component
SFC - Single File Component
SFC - Single File Component
index.js - montowanie Vue i render
zadanie dodatkowe: input field
data i v-for
Stan aplikacji
Reprezentacja wizualna
render
template
data
v-for="element in list"
list: ["a", "b", "c"]
count | label |
---|---|
2 | pizza |
1 | kebab |
3 | pierogi |
data () {
return {
items: [
{ count: 2, label: 'pizza' },
{ count: 1, label: 'kebab' },
{ count: 3, label: 'pierogi' }
]
}
}
dane
2x pizza
<ul>
<li v-for="item in list">
{{ item.count }}x {{ item.label }}
</li>
</ul>
1x kebab
3x pierogi
3x pierogi
1x kebab
3x pierogi
data () {
return {
items: [
{ count: 2, label: 'pizza' },
{ count: 1, label: 'kebab' },
{ count: 3, label: 'pierogi' }
]
}
}
2x pizza
<ul>
<li v-for="item in list" :key="element.label">
{{ item.count }}x {{ item.label }}
</li>
</ul>
1x kebab
3x pierogi
data () {
return {
items: [
{ count: 2, label: 'pizza' },
{ count: 1, label: 'kebab' },
{ count: 3, label: 'pierogi' }
]
}
}
{
id: Number,
name: String,
color: String,
track: Array,
weeklyTarget: Number
}
{
id: 1234,
name: "wake up early",
color: "#bada55",
track: [],
weeklyTarget: 5
}
Dodatkowe:
* pokoloruj tekst
INSTALOWANIE ZALEŻNOŚCI
http://element.eleme.io/
http://element.eleme.io/
$ npm install element-ui
CSS załączamy jak JS
tip:
<el-checkbox-group v-model="habit.track">
$ npm install element-ui
import HabitCard from './HabitCard'
export default {
components: {
HabitCard
}
}
<Well>
<span>something something...</span>
</Well>
<template>
<div class="well">
<slot/>
</div>
</template>
<style scoped>
.well {
// moje style dla well
}
</style>
Well.vue
<HabitCard :habit="objectFromList"/>
<template>
<span>{{ habit.name }}</span>
</template>
<script>
export default {
props: {
habit: Object
}
}
</script>
HabitCard.vue
App.vue
odbieranie danych z zewnątrz
definiowanie prop
// przekazanie zmiennej someData
// przekazanie ciągu 'someData'
// przekazanie ciągu 'someData'
<div
:prop="someData"
prop="someData"
:prop="'someData'"
>
<HabitCard :habit="objectFromList"/>
App.vue
Przygotuj oddzielne komponenty z props i actions:
import HabitCard from './HabitCard'
export default {
components: {
HabitCard
}
}
<HabitCard :habit="objectFromList"/>
<button @click="doSomething"/>
// ...
methods: {
doSomething (evt) {
console.log('clicked!', evt)
}
}
// clicked! MouseEvent { ... }
<button @click="doSomething($event, 'hello')"/>
// ...
methods: {
doSomething (evt, extraParam) {
console.log(extraParam, evt)
}
}
// hello MouseEvent { ... }
specjalna nazwa
<button @click="emitRemove">remove</button>
// ...
methods: {
emitRemove() {
this.$emit('remove')
}
}
<MyComponent @remove="handleRemove"/>
MyComponent.vue
inny komponent
<el-form @submit.native.prevent="onSubmit">
...
</el-form>
Modyfikatory
<input v-model="someData" />
<input
:value="someData"
@input="someData = $event.target.value"
/>
Nasz formularz potrzebuje:
{
id: Number,
name: String,
color: String,
track: Array,
weeklyTarget: Number
}
utwórz komponent z formularzem
dodaj edytowany element do listy na akcję @submit
reset formularza po dodaniu
Zadania z *:
usuwanie elementu listy
color picker
animacja dodawania
<el-form @submit.native.prevent="onSubmit">
...
</el-form>
$ npm install vue-router
jak "slot" dla zawartości podstrony
import HabitList from './components/HabitList.vue'
import NewHabit from './components/NewHabit.vue'
import EditHabit from './components/EditHabit.vue'
Problemy:
jak współdzielić dane między stronami?
jak ograniczyć operacje na danych?
Zadania z *:
<router-view/>
Zadania z *:
<router-view/>
Next steps: VUEX