Skip to content

Commit b721a00

Browse files
author
Wayne Van Son
committed
added vuex, nested with v-model example and example components
1 parent cf0aba1 commit b721a00

File tree

8 files changed

+12996
-2732
lines changed

8 files changed

+12996
-2732
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<template>
2+
<div class="row">
3+
<nested-test class="col-8" v-model="elements"/>
4+
<raw-displayer class="col-4" :title="'Vuex Store'" :value="elements"/>
5+
</div>
6+
</template>
7+
8+
<script>
9+
import NestedTest from "./nested/nested-test.vue";
10+
import rawDisplayer from "./infra/raw-displayer.vue";
11+
12+
export default {
13+
name: "nested-with-vmodel",
14+
display: "Nested with v-model & Vuex",
15+
order: 16,
16+
components: {
17+
NestedTest,
18+
rawDisplayer
19+
},
20+
computed: {
21+
elements: {
22+
get() {
23+
return this.$store.state.nestedA.elements;
24+
},
25+
set(value) {
26+
console.log(value);
27+
this.$store.dispatch("nestedA/updateElements", value);
28+
}
29+
}
30+
},
31+
methods: {}
32+
};
33+
</script>
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<style scoped>
2+
.item-container {
3+
border: solid black 1px;
4+
min-height: 2rem;
5+
}
6+
7+
.item {
8+
padding: 1rem;
9+
10+
}
11+
.item-sub {
12+
padding:1rem;
13+
margin: 0 0 0 1rem
14+
}
15+
</style>
16+
17+
18+
<template>
19+
<draggable v-bind="dragOptions" class="item-container" :list="list" :value="value" @input="emitter">
20+
<div class="item-group" :key="el.id" v-for="(el, i) in realValue">
21+
<div class="item">{{ el.name }}</div>
22+
<nested-test class="item-sub" :list="el.elements"/>
23+
</div>
24+
</draggable>
25+
</template>
26+
27+
<script>
28+
import draggable from "@/vuedraggable";
29+
export default {
30+
name: "nested-test",
31+
methods: {
32+
emitter(value) {
33+
this.$emit("input", value);
34+
}
35+
},
36+
components: {
37+
draggable
38+
},
39+
computed: {
40+
dragOptions() {
41+
return {transition: 200,}
42+
},
43+
realValue() {
44+
const test = this.value ? this.value : this.list;
45+
return test;
46+
}
47+
},
48+
props: {
49+
value: {
50+
required: false,
51+
type: Array,
52+
default: null
53+
},
54+
list: {
55+
required: false,
56+
type: Array,
57+
default: null
58+
}
59+
}
60+
};
61+
</script>

example/components/nested/nested1.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import Vuex from "vuex";
2+
import Vue from "vue";
3+
4+
Vue.use(Vuex);
5+
6+
export const nestedA = {
7+
namespaced: true,
8+
state: {
9+
elements: [
10+
{
11+
id: 1,
12+
name: "Shrek",
13+
elements: []
14+
},
15+
{
16+
id: 2,
17+
name: "Fiona",
18+
elements: [
19+
{
20+
id: 4,
21+
name: "King",
22+
elements: []
23+
},
24+
{
25+
id: 5,
26+
name: "Queen",
27+
elements: []
28+
}
29+
]
30+
},
31+
{
32+
id: 3,
33+
name: "Donkey",
34+
elements: []
35+
}
36+
]
37+
},
38+
mutations: {
39+
updateElements: (state, payload) => {
40+
state.elements = payload;
41+
}
42+
},
43+
actions: {
44+
updateElements: ({ commit }, payload) => {
45+
commit("updateElements", payload);
46+
}
47+
}
48+
}

example/main.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import VueRouter from "vue-router";
44
import routes from "./route";
55
import rawDisplayer from "./components/infra/raw-displayer.vue";
66
import ElementUI from "element-ui";
7-
7+
import store from "./store";
88
import "bootstrap/dist/css/bootstrap.min.css";
99
import "font-awesome/css/font-awesome.css";
1010

@@ -20,6 +20,7 @@ Vue.component("rawDisplayer", rawDisplayer);
2020
Vue.use(ElementUI);
2121

2222
new Vue({
23+
store,
2324
router,
2425
render: h => h(App)
2526
}).$mount("#app");

example/store.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { nestedA } from "./components/nested/nested1";
2+
import Vuex from "vuex";
3+
import Vue from "vue";
4+
5+
Vue.use(Vuex);
6+
7+
export default new Vuex.Store({
8+
namespaced: true,
9+
modules: {
10+
nestedA
11+
}
12+
});

0 commit comments

Comments
 (0)