feat: vc-form
							parent
							
								
									07b0d46864
								
							
						
					
					
						commit
						c0bf96fccd
					
				|  | @ -18,7 +18,7 @@ import { | |||
|   flattenArray, | ||||
| } from './utils' | ||||
| 
 | ||||
| const DEFAULT_TRIGGER = 'onChange' | ||||
| const DEFAULT_TRIGGER = 'change' | ||||
| 
 | ||||
| function createBaseForm (option = {}, mixins = []) { | ||||
|   const { | ||||
|  | @ -94,7 +94,7 @@ function createBaseForm (option = {}, mixins = []) { | |||
|             const valuesAllSet = {} | ||||
|             valuesAll[name] = value | ||||
|             Object.keys(valuesAll).forEach(key => set(valuesAllSet, key, valuesAll[key])) | ||||
|             onValuesChange(this.props, set({}, name, value), valuesAllSet) | ||||
|             onValuesChange(this.$props, set({}, name, value), valuesAllSet) | ||||
|           } | ||||
|           const field = this.fieldsStore.getField(name) | ||||
|           return ({ name, field: { ...field, value, touched: true }, fieldMeta }) | ||||
|  | @ -148,7 +148,7 @@ function createBaseForm (option = {}, mixins = []) { | |||
|         }, | ||||
| 
 | ||||
|         getFieldDecorator (name, fieldOption) { | ||||
|           const { ref, ...restProps } = this.getFieldProps(name, fieldOption) | ||||
|           const { directives, props } = this.getFieldProps(name, fieldOption) | ||||
|           return (fieldElem) => { | ||||
|             const fieldMeta = this.fieldsStore.getFieldMeta(name) | ||||
|             const originalProps = fieldElem.props | ||||
|  | @ -173,10 +173,10 @@ function createBaseForm (option = {}, mixins = []) { | |||
|             fieldMeta.ref = fieldElem.ref | ||||
|             return cloneElement(fieldElem, { | ||||
|               props: { | ||||
|                 ...restProps, | ||||
|                 ...props, | ||||
|                 ...this.fieldsStore.getFieldValuePropValue(fieldMeta), | ||||
|               }, | ||||
|               ref, | ||||
|               directives, | ||||
|             }) | ||||
|           } | ||||
|         }, | ||||
|  | @ -220,25 +220,10 @@ function createBaseForm (option = {}, mixins = []) { | |||
| 
 | ||||
|           const inputProps = { | ||||
|             ...this.fieldsStore.getFieldValuePropValue(fieldOption), | ||||
|             ref: name, | ||||
|             // ref: name, | ||||
|             on: {}, | ||||
|           } | ||||
|           const saveRef = this.getCacheBind(name, `${name}__ref`, this.saveRef) | ||||
|           this.$nextTick(() => { | ||||
|             if (this.instances[name] !== this.$refs[name]) { | ||||
|               this.$refs[name].destroyed = () => { | ||||
|                 this.$refs[name].destroyed() | ||||
|                 // after destroy, delete data | ||||
|                 this.clearedFieldMetaCache[name] = { | ||||
|                   field: this.fieldsStore.getField(name), | ||||
|                   meta: this.fieldsStore.getFieldMeta(name), | ||||
|                 } | ||||
|                 this.fieldsStore.clearField(name) | ||||
|                 delete this.instances[name] | ||||
|                 delete this.cachedBind[name] | ||||
|               } | ||||
|             } | ||||
|             saveRef(name, `${name}__ref`, this.$refs[name]) | ||||
|           }) | ||||
|           if (fieldNameProp) { | ||||
|             inputProps[fieldNameProp] = name | ||||
|           } | ||||
|  | @ -252,7 +237,7 @@ function createBaseForm (option = {}, mixins = []) { | |||
| 
 | ||||
|           // make sure that the value will be collect | ||||
|           if (trigger && validateTriggers.indexOf(trigger) === -1) { | ||||
|             inputProps[trigger] = this.getCacheBind(name, trigger, this.onCollect) | ||||
|             inputProps.on[trigger] = this.getCacheBind(name, trigger, this.onCollect) | ||||
|           } | ||||
| 
 | ||||
|           const meta = { | ||||
|  | @ -269,7 +254,14 @@ function createBaseForm (option = {}, mixins = []) { | |||
|             inputProps[fieldDataProp] = this.fieldsStore.getField(name) | ||||
|           } | ||||
| 
 | ||||
|           return inputProps | ||||
|           return { | ||||
|             props: inputProps, | ||||
|             directives: [ | ||||
|               { name: 'ant-form-item-ref-cal', value: (component) => { | ||||
|                 saveRef(component) | ||||
|               } }, | ||||
|             ], | ||||
|           } | ||||
|         }, | ||||
| 
 | ||||
|         getFieldInstance (name) { | ||||
|  | @ -289,9 +281,12 @@ function createBaseForm (option = {}, mixins = []) { | |||
|           if (onFieldsChange) { | ||||
|             const changedFields = Object.keys(fields) | ||||
|               .reduce((acc, name) => set(acc, name, this.fieldsStore.getField(name)), {}) | ||||
|             onFieldsChange(this.props, changedFields, this.fieldsStore.getNestedAllFields()) | ||||
|             onFieldsChange(this.$props, changedFields, this.fieldsStore.getNestedAllFields()) | ||||
|           } | ||||
|           this.forceUpdate(callback) | ||||
|           this.$forceUpdate() | ||||
|           this.$nextTick(() => { | ||||
|             callback && callback() | ||||
|           }) | ||||
|         }, | ||||
| 
 | ||||
|         resetFields (ns) { | ||||
|  | @ -330,11 +325,22 @@ function createBaseForm (option = {}, mixins = []) { | |||
|           this.setFields(newFields, callback) | ||||
|           if (onValuesChange) { | ||||
|             const allValues = this.fieldsStore.getAllValues() | ||||
|             onValuesChange(this.props, changedValues, allValues) | ||||
|             onValuesChange(this.$props, changedValues, allValues) | ||||
|           } | ||||
|         }, | ||||
| 
 | ||||
|         saveRef (name, _, component) { | ||||
|           if (!component) { | ||||
|             // after destroy, delete data | ||||
|             this.clearedFieldMetaCache[name] = { | ||||
|               field: this.fieldsStore.getField(name), | ||||
|               meta: this.fieldsStore.getFieldMeta(name), | ||||
|             } | ||||
|             this.fieldsStore.clearField(name) | ||||
|             delete this.instances[name] | ||||
|             delete this.cachedBind[name] | ||||
|             return | ||||
|           } | ||||
|           this.recoverClearedField(name) | ||||
|           const fieldMeta = this.fieldsStore.getFieldMeta(name) | ||||
|           if (fieldMeta) { | ||||
|  |  | |||
|  | @ -2,5 +2,15 @@ | |||
| import createForm from './createForm' | ||||
| import createFormField from './createFormField' | ||||
| import formShape from './propTypes' | ||||
| import Vue from 'vue' | ||||
| 
 | ||||
| Vue.directive('ant-form-item-ref-cal', { | ||||
|   inserted: function (el, binding, vnode) { | ||||
|     binding.value(vnode) | ||||
|   }, | ||||
|   unbind: function (el, binding, vnode) { | ||||
|     binding.value() | ||||
|   }, | ||||
| }) | ||||
| 
 | ||||
| export { createForm, createFormField, formShape } | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| { | ||||
|     "name": "vue-antd-ui", | ||||
|     "version": "0.4.0", | ||||
|     "version": "0.4.3", | ||||
|     "lockfileVersion": 1, | ||||
|     "requires": true, | ||||
|     "dependencies": { | ||||
|  | @ -620,6 +620,14 @@ | |||
|             "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "async-validator": { | ||||
|             "version": "1.8.2", | ||||
|             "resolved": "http://registry.npm.taobao.org/async-validator/download/async-validator-1.8.2.tgz", | ||||
|             "integrity": "sha1-t3WXIm6WJC+NUxwNRq4pX2JCK6Q=", | ||||
|             "requires": { | ||||
|                 "babel-runtime": "6.26.0" | ||||
|             } | ||||
|         }, | ||||
|         "asynckit": { | ||||
|             "version": "0.4.0", | ||||
|             "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", | ||||
|  | @ -1044,6 +1052,12 @@ | |||
|             "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "babel-plugin-syntax-class-properties": { | ||||
|             "version": "6.13.0", | ||||
|             "resolved": "http://registry.npm.taobao.org/babel-plugin-syntax-class-properties/download/babel-plugin-syntax-class-properties-6.13.0.tgz", | ||||
|             "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "babel-plugin-syntax-decorators": { | ||||
|             "version": "6.13.0", | ||||
|             "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", | ||||
|  | @ -1091,6 +1105,18 @@ | |||
|                 "babel-runtime": "6.26.0" | ||||
|             } | ||||
|         }, | ||||
|         "babel-plugin-transform-class-properties": { | ||||
|             "version": "6.24.1", | ||||
|             "resolved": "http://registry.npm.taobao.org/babel-plugin-transform-class-properties/download/babel-plugin-transform-class-properties-6.24.1.tgz", | ||||
|             "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "babel-helper-function-name": "6.24.1", | ||||
|                 "babel-plugin-syntax-class-properties": "6.13.0", | ||||
|                 "babel-runtime": "6.26.0", | ||||
|                 "babel-template": "6.26.0" | ||||
|             } | ||||
|         }, | ||||
|         "babel-plugin-transform-decorators": { | ||||
|             "version": "6.24.1", | ||||
|             "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", | ||||
|  |  | |||
|  | @ -61,6 +61,7 @@ | |||
|     "babel-plugin-istanbul": "^4.1.1", | ||||
|     "babel-plugin-syntax-dynamic-import": "^6.18.0", | ||||
|     "babel-plugin-syntax-jsx": "^6.18.0", | ||||
|     "babel-plugin-transform-class-properties": "^6.24.1", | ||||
|     "babel-plugin-transform-decorators": "^6.24.1", | ||||
|     "babel-plugin-transform-decorators-legacy": "^1.3.4", | ||||
|     "babel-plugin-transform-es3-member-expression-literals": "^6.22.0", | ||||
|  | @ -81,8 +82,8 @@ | |||
|     "css-loader": "^0.28.7", | ||||
|     "deep-assign": "^2.0.0", | ||||
|     "eslint": "^4.7.2", | ||||
|     "eslint-plugin-vue": "^3.13.0", | ||||
|     "eslint-plugin-html": "^3.2.2", | ||||
|     "eslint-plugin-vue": "^3.13.0", | ||||
|     "eslint-plugin-vue-libs": "^1.2.1", | ||||
|     "extract-text-webpack-plugin": "^3.0.2", | ||||
|     "fetch-jsonp": "^1.1.3", | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 tjz
						tjz