Skip to content

Commit 7ddc17b

Browse files
committed
docs: add form vuex demo close #465
1 parent e60122a commit 7ddc17b

File tree

5 files changed

+120
-1
lines changed

5 files changed

+120
-1
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
import demoTest from '../../../tests/shared/demoTest';
22

3-
demoTest('form', { suffix: 'vue', skip: ['index.vue'] });
3+
demoTest('form', { suffix: 'vue', skip: ['index.vue', 'vuex.vue'] });

components/form/demo/index.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import FormInModal from './form-in-modal';
1313
import FormInModalString from '!raw-loader!./form-in-modal';
1414
import GlobalState from './global-state';
1515
import GlobalStateString from '!raw-loader!./global-state';
16+
import VuexState from './vuex';
17+
import VuexStateString from '!raw-loader!./vuex';
1618
import HorizontalLogin from './horizontal-login';
1719
import HorizontalLoginString from '!raw-loader!./horizontal-login';
1820
import Layout from './layout';
@@ -130,6 +132,9 @@ export default {
130132
<demo-container code={GlobalStateString}>
131133
<GlobalState />
132134
</demo-container>
135+
<demo-container code={VuexStateString}>
136+
<VuexState />
137+
</demo-container>
133138
<demo-container code={NormalLoginString}>
134139
<NormalLogin />
135140
</demo-container>

components/form/demo/vuex.vue

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<cn>
2+
#### 表单数据存储于 Vuex Store 中
3+
通过使用 onFieldsChange 与 mapPropsToFields,可以把表单的数据存储到 Vuex 中。
4+
**注意:**
5+
`mapPropsToFields` 里面返回的表单域数据必须使用 `Form.createFormField` 包装。
6+
</cn>
7+
8+
<us>
9+
#### Store Form Data into Vuex Store
10+
We can store form data into Vuex Store.
11+
**Note:**
12+
You must wrap field data with `Form.createFormField` in `mapPropsToFields`.
13+
</us>
14+
15+
16+
<template>
17+
<div id="components-form-demo-vuex">
18+
<a-form
19+
:form="form"
20+
@submit="handleSubmit"
21+
>
22+
<a-form-item label="Username">
23+
<a-input
24+
v-decorator="[
25+
'username',
26+
{
27+
rules: [{ required: true, message: 'Username is required!' }],
28+
}
29+
]"
30+
/>
31+
</a-form-item>
32+
<a-button
33+
type="primary"
34+
html-type="submit"
35+
>
36+
Submit
37+
</a-button>
38+
</a-form>
39+
</div>
40+
</template>
41+
42+
<script>
43+
export default {
44+
computed: {
45+
username () {
46+
return this.$store.state.username;
47+
},
48+
},
49+
watch: {
50+
username (val) {
51+
console.log('this.$store.state.username: ', val);
52+
this.form.setFieldsValue({username: val});
53+
},
54+
},
55+
created () {
56+
this.form = this.$form.createForm(this, {
57+
onFieldsChange: (_, changedFields) => {
58+
this.$emit('change', changedFields);
59+
},
60+
mapPropsToFields: () => {
61+
return {
62+
username: this.$form.createFormField({
63+
value: this.username,
64+
}),
65+
};
66+
},
67+
onValuesChange: (_, values) =>{
68+
console.log(values);
69+
// Synchronize to vuex store in real time
70+
// this.$store.commit('update', values)
71+
},
72+
});
73+
},
74+
methods: {
75+
handleSubmit (e) {
76+
e.preventDefault();
77+
this.form.validateFields((err, values) => {
78+
if (!err) {
79+
console.log('Received values of form: ', values);
80+
this.$store.commit('update', values);
81+
}
82+
});
83+
},
84+
},
85+
};
86+
</script>
87+
<style>
88+
#components-form-demo-vuex .language-bash {
89+
max-width: 400px;
90+
border-radius: 6px;
91+
margin-top: 24px;
92+
}
93+
</style>
94+
95+
96+
97+
98+

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@
165165
"vue-server-renderer": "^2.5.16",
166166
"vue-template-compiler": "^2.5.16",
167167
"vue-virtual-scroller": "^0.12.0",
168+
"vuex": "^3.1.0",
168169
"webpack": "^4.28.4",
169170
"webpack-cli": "^3.2.1",
170171
"webpack-dev-server": "^3.1.14",

site/index.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import './index.less';
44
import 'nprogress/nprogress.css';
55
import 'highlight.js/styles/solarized-light.css';
66
import Vue from 'vue';
7+
import Vuex from 'vuex';
78
import VueI18n from 'vue-i18n';
89
import VueRouter from 'vue-router';
910
import VueClipboard from 'vue-clipboard2';
@@ -28,6 +29,7 @@ const mountedCallback = {
2829
},
2930
};
3031

32+
Vue.use(Vuex);
3133
Vue.use(mountedCallback);
3234
Vue.use(VueClipboard);
3335
Vue.use(VueRouter);
@@ -56,8 +58,21 @@ router.beforeEach((to, from, next) => {
5658
}
5759
next();
5860
});
61+
62+
const store = new Vuex.Store({
63+
state: {
64+
username: 'zeka',
65+
},
66+
mutations: {
67+
update(state, payload) {
68+
state.username = payload.username;
69+
},
70+
},
71+
});
72+
5973
new Vue({
6074
el: '#app',
6175
i18n,
6276
router,
77+
store,
6378
});

0 commit comments

Comments
 (0)