feat: add vc-form demo
parent
29b9c51f57
commit
f1d987b72b
|
@ -60,7 +60,7 @@ export function cloneElement (n, nodeProps, deep) {
|
|||
return null
|
||||
}
|
||||
const node = cloneVNode(ele, deep)
|
||||
const { props = {}, key, on = {}, children } = nodeProps
|
||||
const { props = {}, key, on = {}, children, directives = [] } = nodeProps
|
||||
const data = node.data || {}
|
||||
let cls = {}
|
||||
let style = {}
|
||||
|
@ -101,6 +101,7 @@ export function cloneElement (n, nodeProps, deep) {
|
|||
class: cls,
|
||||
domProps: { ...data.domProps, ...domProps },
|
||||
scopedSlots: { ...data.scopedSlots, ...scopedSlots },
|
||||
directives: [...(data.directives || []), ...directives],
|
||||
})
|
||||
|
||||
if (node.componentOptions) {
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
/* eslint react/no-multi-comp:0, no-console:0 */
|
||||
|
||||
import { createForm } from '../index'
|
||||
import { regionStyle, errorStyle } from './styles'
|
||||
import BaseMixin from '../../_util/BaseMixin'
|
||||
|
||||
const Email = {
|
||||
props: {
|
||||
form: Object,
|
||||
},
|
||||
methods: {
|
||||
checkSpecial (rule, value, callback) {
|
||||
setTimeout(() => {
|
||||
if (value === 'yiminghe@gmail.com') {
|
||||
callback('can not be!')
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}, 1000)
|
||||
},
|
||||
},
|
||||
|
||||
render () {
|
||||
const { getFieldProps, getFieldError, isFieldValidating } = this.form
|
||||
const errors = getFieldError('email')
|
||||
return (<div style={ regionStyle }>
|
||||
<div>email validate onBlur</div>
|
||||
<div>
|
||||
<input {...getFieldProps('email', {
|
||||
initialValue: '',
|
||||
validateFirst: true,
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
type: 'email',
|
||||
message: '错误的 email 格式',
|
||||
},
|
||||
this.checkSpecial,
|
||||
],
|
||||
validateTrigger: 'blur',
|
||||
})}
|
||||
/></div>
|
||||
<div style={errorStyle}>
|
||||
{errors ? errors.join(',') : null}
|
||||
</div>
|
||||
<div style={errorStyle}>
|
||||
{isFieldValidating('email') ? 'validating' : null}
|
||||
</div>
|
||||
</div>)
|
||||
},
|
||||
}
|
||||
|
||||
const Form = {
|
||||
mixins: [BaseMixin],
|
||||
props: {
|
||||
form: Object,
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
loading: true,
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
setTimeout(() => {
|
||||
this.setState({
|
||||
loading: false,
|
||||
}, () => {
|
||||
setTimeout(() => {
|
||||
this.form.setFieldsInitialValue({
|
||||
email: 'xx@gmail.com',
|
||||
})
|
||||
}, 1000)
|
||||
})
|
||||
}, 1000)
|
||||
},
|
||||
methods: {
|
||||
onSubmit (e) {
|
||||
e.preventDefault()
|
||||
this.form.submit((callback) => {
|
||||
setTimeout(() => {
|
||||
this.form.validateFields((error, values) => {
|
||||
if (!error) {
|
||||
console.log('ok', values)
|
||||
} else {
|
||||
console.log('error', error, values)
|
||||
}
|
||||
callback()
|
||||
})
|
||||
}, 1000)
|
||||
})
|
||||
},
|
||||
|
||||
reset (e) {
|
||||
e.preventDefault()
|
||||
this.form.resetFields()
|
||||
},
|
||||
},
|
||||
|
||||
render () {
|
||||
if (this.loading) {
|
||||
return <b>loading</b>
|
||||
}
|
||||
const { form } = this
|
||||
const disabled = form.isFieldsValidating() || form.isSubmitting()
|
||||
return (<div style={{ margin: 20 }}>
|
||||
<h2>async init field</h2>
|
||||
<form onSubmit={this.onSubmit}>
|
||||
<Email form={ form }/>
|
||||
|
||||
<div style={ regionStyle }>
|
||||
<button disabled={disabled} type='submit'>submit</button>
|
||||
{disabled ? <span style={{ color: 'red' }}>disabled</span> : null}
|
||||
<button disabled={disabled} onClick={this.reset}>reset</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>)
|
||||
},
|
||||
}
|
||||
|
||||
export default createForm()(Form)
|
|
@ -0,0 +1,201 @@
|
|||
/* eslint react/no-multi-comp:0, no-console:0 */
|
||||
|
||||
import { createForm } from '../index'
|
||||
import BaseMixin from '../../_util/BaseMixin'
|
||||
|
||||
const Form1 = {
|
||||
mixins: [BaseMixin],
|
||||
props: {
|
||||
form: Object,
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
useInput: true,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onSubmit (e) {
|
||||
e.preventDefault()
|
||||
this.form.validateFields((error, values) => {
|
||||
if (!error) {
|
||||
console.log('ok', values)
|
||||
} else {
|
||||
console.log('error', error, values)
|
||||
}
|
||||
})
|
||||
},
|
||||
changeUseInput (e) {
|
||||
this.setState({
|
||||
useInput: e.target.checked,
|
||||
})
|
||||
},
|
||||
},
|
||||
|
||||
render () {
|
||||
const { getFieldError, getFieldDecorator } = this.form
|
||||
|
||||
return (
|
||||
<form onSubmit={this.onSubmit}>
|
||||
<h2>situation 1</h2>
|
||||
{this.useInput ? getFieldDecorator('name', {
|
||||
initialValue: '',
|
||||
rules: [{
|
||||
required: true,
|
||||
message: 'What\'s your name 1?',
|
||||
}],
|
||||
})(<input/>) : null}
|
||||
<span>text content</span>
|
||||
{this.useInput ? null : getFieldDecorator('name', {
|
||||
initialValue: '',
|
||||
rules: [{
|
||||
required: true,
|
||||
message: 'What\'s your name 2?',
|
||||
}],
|
||||
})(<input />)}
|
||||
<div>
|
||||
<label>
|
||||
<input type='checkbox' checked={this.useInput} onInput={this.changeUseInput} />
|
||||
change input
|
||||
</label>
|
||||
{(getFieldError('name') || []).join(', ')}
|
||||
</div>
|
||||
<button>Submit</button>
|
||||
</form>
|
||||
)
|
||||
},
|
||||
}
|
||||
|
||||
const Form2 = {
|
||||
mixins: [BaseMixin],
|
||||
props: {
|
||||
form: Object,
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
useInput: true,
|
||||
}
|
||||
},
|
||||
beforeMount () {
|
||||
const { getFieldDecorator } = this.form
|
||||
this.nameDecorator = getFieldDecorator('name', {
|
||||
initialValue: '',
|
||||
rules: [{
|
||||
required: true,
|
||||
message: 'What\'s your name?',
|
||||
}],
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
onSubmit (e) {
|
||||
e.preventDefault()
|
||||
this.form.validateFields((error, values) => {
|
||||
if (!error) {
|
||||
console.log('ok', values)
|
||||
} else {
|
||||
console.log('error', error, values)
|
||||
}
|
||||
})
|
||||
},
|
||||
changeUseInput (e) {
|
||||
this.setState({
|
||||
useInput: e.target.checked,
|
||||
})
|
||||
},
|
||||
},
|
||||
|
||||
render () {
|
||||
const { getFieldError } = this.form
|
||||
return (
|
||||
<form onSubmit={this.onSubmit}>
|
||||
<h2>situation 2</h2>
|
||||
{this.useInput ? this.nameDecorator(<input />) : null}
|
||||
<span>text content</span>
|
||||
{this.useInput ? null : this.nameDecorator(<input />)}
|
||||
<div>
|
||||
<label>
|
||||
<input type='checkbox' checked={this.useInput} onInput={this.changeUseInput} />
|
||||
change input
|
||||
</label>
|
||||
{(getFieldError('name') || []).join(', ')}
|
||||
</div>
|
||||
<button>Submit</button>
|
||||
</form>
|
||||
)
|
||||
},
|
||||
}
|
||||
|
||||
const Form3 = {
|
||||
mixins: [BaseMixin],
|
||||
props: {
|
||||
form: Object,
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
useInput: false,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onSubmit (e) {
|
||||
e.preventDefault()
|
||||
this.form.validateFields((error, values) => {
|
||||
if (!error) {
|
||||
console.log('ok', values)
|
||||
} else {
|
||||
console.log('error', error, values)
|
||||
}
|
||||
})
|
||||
},
|
||||
changeUseInput (e) {
|
||||
this.setState({
|
||||
useInput: e.target.checked,
|
||||
})
|
||||
},
|
||||
},
|
||||
|
||||
render () {
|
||||
const { getFieldError, getFieldDecorator } = this.form
|
||||
return (
|
||||
<form onSubmit={this.onSubmit}>
|
||||
<h2>situation 3</h2>
|
||||
{getFieldDecorator('name', {
|
||||
initialValue: '',
|
||||
rules: [{
|
||||
required: true,
|
||||
message: 'What\'s your name 1?',
|
||||
}],
|
||||
})(<input />)}
|
||||
{this.useInput ? null : getFieldDecorator('name2', {
|
||||
initialValue: '',
|
||||
rules: [{
|
||||
required: true,
|
||||
message: 'What\'s your name 2?',
|
||||
}],
|
||||
})(<input />)}
|
||||
<div>
|
||||
<label>
|
||||
<input type='checkbox' checked={this.useInput} onInput={this.changeUseInput} />
|
||||
Hide second input
|
||||
</label>
|
||||
{(getFieldError('name') || []).join(', ')}
|
||||
</div>
|
||||
<button>Submit</button>
|
||||
</form>
|
||||
)
|
||||
},
|
||||
}
|
||||
|
||||
const WrappedForm1 = createForm()(Form1)
|
||||
const WrappedForm2 = createForm()(Form2)
|
||||
const WrappedForm3 = createForm()(Form3)
|
||||
|
||||
export default {
|
||||
render () {
|
||||
return (
|
||||
<div>
|
||||
<WrappedForm1 />
|
||||
<WrappedForm2 />
|
||||
<WrappedForm3 />
|
||||
</div>
|
||||
)
|
||||
},
|
||||
}
|
|
@ -0,0 +1,131 @@
|
|||
/* eslint react/no-multi-comp:0, no-console:0 */
|
||||
|
||||
import { createForm } from '../index'
|
||||
import { regionStyle, errorStyle } from './styles'
|
||||
|
||||
const Email = {
|
||||
props: {
|
||||
form: Object,
|
||||
hidden: Boolean,
|
||||
},
|
||||
render () {
|
||||
const { hidden, form } = this
|
||||
const { getFieldProps, getFieldError, isFieldValidating } = form
|
||||
const errors = getFieldError('email')
|
||||
const style = {
|
||||
...regionStyle,
|
||||
display: hidden ? 'none' : '',
|
||||
}
|
||||
return (<div style={ style }>
|
||||
<div>email:
|
||||
<input {...getFieldProps('email', {
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
type: 'email',
|
||||
message: '错误的 email 格式',
|
||||
},
|
||||
],
|
||||
hidden,
|
||||
})}
|
||||
/></div>
|
||||
|
||||
{errors ? <div style={errorStyle}>{errors.join(',')}</div> : null}
|
||||
|
||||
{isFieldValidating('email') ? <div style={errorStyle}>validating</div> : null}
|
||||
</div>)
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
const User = {
|
||||
props: {
|
||||
form: Object,
|
||||
},
|
||||
render () {
|
||||
const { getFieldProps, getFieldError, isFieldValidating } = this.form
|
||||
const errors = getFieldError('user')
|
||||
return (<div style={ regionStyle }>
|
||||
<div>user:
|
||||
<input {...getFieldProps('user', {
|
||||
initialValue: 'x',
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
},
|
||||
],
|
||||
})}
|
||||
/>
|
||||
</div>
|
||||
{errors ? <div style={errorStyle}>{errors.join(',')}</div> : null}
|
||||
|
||||
{isFieldValidating('user') ? <div style={errorStyle}>validating</div> : null}
|
||||
</div>)
|
||||
},
|
||||
}
|
||||
|
||||
const Form = {
|
||||
props: {
|
||||
form: Object,
|
||||
},
|
||||
methods: {
|
||||
onSubmit (e) {
|
||||
e.preventDefault()
|
||||
this.form.validateFields((error, values) => {
|
||||
if (!error) {
|
||||
console.log('ok', values)
|
||||
} else {
|
||||
console.log('error', error, values)
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
|
||||
render () {
|
||||
const { form } = this
|
||||
const { getFieldProps, getFieldValue } = form
|
||||
return (<div style={{ margin: 20 }}>
|
||||
<h2>overview</h2>
|
||||
<form onSubmit={this.onSubmit}>
|
||||
<div style={ regionStyle }>
|
||||
<div>
|
||||
<label>remove/add user:
|
||||
<input
|
||||
type='checkbox'
|
||||
{...getFieldProps('remove_user', {
|
||||
// initialValue:true,
|
||||
valuePropName: 'checked',
|
||||
})}
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{ getFieldValue('remove_user') ? null : <User form={ form }/>}
|
||||
|
||||
<div style={ regionStyle }>
|
||||
<div>
|
||||
<label>hide/show email:
|
||||
<input
|
||||
type='checkbox'
|
||||
{...getFieldProps('hide_email', {
|
||||
// initialValue:true,
|
||||
valuePropName: 'checked',
|
||||
})}
|
||||
/></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Email form={ form } hidden={!!getFieldValue('hide_email')}/>
|
||||
|
||||
<div style={ regionStyle }>
|
||||
<button>submit</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>)
|
||||
},
|
||||
}
|
||||
|
||||
export default createForm()(Form)
|
|
@ -0,0 +1,83 @@
|
|||
/* eslint react/no-multi-comp:0, no-console:0 */
|
||||
|
||||
import { createForm } from '../index'
|
||||
import { regionStyle, errorStyle } from './styles'
|
||||
|
||||
function getFileValueProps (value) {
|
||||
if (value && value.target) {
|
||||
return {
|
||||
value: value.target.value,
|
||||
}
|
||||
}
|
||||
return {
|
||||
value,
|
||||
}
|
||||
}
|
||||
|
||||
function getValueFromFileEvent ({ target }) {
|
||||
return {
|
||||
target,
|
||||
}
|
||||
}
|
||||
|
||||
const Form = {
|
||||
props: {
|
||||
form: Object,
|
||||
},
|
||||
methods: {
|
||||
onSubmit (e) {
|
||||
e.preventDefault()
|
||||
this.form.validateFields((error, values) => {
|
||||
console.log(error, values)
|
||||
if (!error) {
|
||||
console.log('校验通过')
|
||||
}
|
||||
})
|
||||
},
|
||||
checkSize (rule, value, callback) {
|
||||
if (value && value.target) {
|
||||
const files = value.target.files
|
||||
if (files[0]) {
|
||||
callback(files[0].size > 1000000 ? 'file size must be less than 1M' : undefined)
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
render () {
|
||||
const { getFieldProps, getFieldError } = this.form
|
||||
const errors = getFieldError('attachment')
|
||||
return (<div
|
||||
style={ regionStyle }
|
||||
>
|
||||
<div>attachment:</div>
|
||||
<div>
|
||||
<input type='file' {...getFieldProps('attachment', {
|
||||
getValueProps: getFileValueProps,
|
||||
getValueFromEvent: getValueFromFileEvent,
|
||||
rules: [this.checkSize],
|
||||
})}
|
||||
/>
|
||||
</div>
|
||||
<div style={errorStyle}>
|
||||
{(errors) ? errors.join(',') : null}
|
||||
</div>
|
||||
<button onClick={this.onSubmit}>submit</button>
|
||||
</div>)
|
||||
},
|
||||
}
|
||||
|
||||
const NewForm = createForm()(Form)
|
||||
|
||||
export default {
|
||||
render () {
|
||||
return (<div>
|
||||
<h2>input[type="file"]</h2>
|
||||
<NewForm />
|
||||
</div>)
|
||||
},
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
/* eslint react/no-multi-comp:0, no-console:0 */
|
||||
|
||||
import { createForm } from '../index'
|
||||
|
||||
const Form = {
|
||||
props: {
|
||||
form: Object,
|
||||
},
|
||||
|
||||
beforeMount () {
|
||||
this.nameDecorator = this.form.getFieldDecorator('name', {
|
||||
initialValue: '',
|
||||
rules: [{
|
||||
required: true,
|
||||
message: 'What\'s your name?',
|
||||
}],
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
onSubmit (e) {
|
||||
e.preventDefault()
|
||||
this.form.validateFields((error, values) => {
|
||||
if (!error) {
|
||||
console.log('ok', values)
|
||||
} else {
|
||||
console.log('error', error, values)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
onChange (e) {
|
||||
console.log(e.target.value)
|
||||
},
|
||||
},
|
||||
|
||||
render () {
|
||||
const { getFieldError } = this.form
|
||||
|
||||
return (
|
||||
<form onSubmit={this.onSubmit}>
|
||||
{this.nameDecorator(
|
||||
<input
|
||||
onInput={this.onChange}
|
||||
/>
|
||||
)}
|
||||
<div style={{ color: 'red' }}>
|
||||
{(getFieldError('name') || []).join(', ')}
|
||||
</div>
|
||||
<button>Submit</button>
|
||||
</form>
|
||||
)
|
||||
},
|
||||
}
|
||||
|
||||
export default createForm()(Form)
|
|
@ -5,7 +5,9 @@ import set from 'lodash/set'
|
|||
import createFieldsStore from './createFieldsStore'
|
||||
import { cloneElement } from '../../_util/vnode'
|
||||
import BaseMixin from '../../_util/BaseMixin'
|
||||
import PropTypes from '../../_util/vue-types'
|
||||
import { getOptionProps, getEvents } from '../../_util/props-util'
|
||||
// import PropTypes from '../../_util/vue-types'
|
||||
|
||||
import {
|
||||
argumentContainer,
|
||||
identity,
|
||||
|
@ -18,7 +20,7 @@ import {
|
|||
flattenArray,
|
||||
} from './utils'
|
||||
|
||||
const DEFAULT_TRIGGER = 'change'
|
||||
const DEFAULT_TRIGGER = 'input'
|
||||
|
||||
function createBaseForm (option = {}, mixins = []) {
|
||||
const {
|
||||
|
@ -38,10 +40,10 @@ function createBaseForm (option = {}, mixins = []) {
|
|||
return function decorate (WrappedComponent) {
|
||||
const Form = {
|
||||
mixins: [BaseMixin, ...mixins],
|
||||
props: {
|
||||
hideRequiredMark: PropTypes.bool,
|
||||
layout: PropTypes.string,
|
||||
},
|
||||
// props: {
|
||||
// hideRequiredMark: PropTypes.bool,
|
||||
// layout: PropTypes.string,
|
||||
// },
|
||||
data () {
|
||||
const fields = mapPropsToFields && mapPropsToFields(this.$props)
|
||||
this.fieldsStore = createFieldsStore(fields || {})
|
||||
|
@ -148,10 +150,11 @@ function createBaseForm (option = {}, mixins = []) {
|
|||
},
|
||||
|
||||
getFieldDecorator (name, fieldOption) {
|
||||
const { directives, props } = this.getFieldProps(name, fieldOption)
|
||||
const { props, ...restProps } = this.getFieldProps(name, fieldOption)
|
||||
return (fieldElem) => {
|
||||
const fieldMeta = this.fieldsStore.getFieldMeta(name)
|
||||
const originalProps = fieldElem.props
|
||||
const originalProps = getOptionProps(fieldElem)
|
||||
const originalEvents = getEvents(fieldElem)
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
const valuePropName = fieldMeta.valuePropName
|
||||
warning(
|
||||
|
@ -170,14 +173,26 @@ function createBaseForm (option = {}, mixins = []) {
|
|||
)
|
||||
}
|
||||
fieldMeta.originalProps = originalProps
|
||||
fieldMeta.ref = fieldElem.ref
|
||||
return cloneElement(fieldElem, {
|
||||
// fieldMeta.ref = fieldElem.data && fieldElem.data.ref
|
||||
const newProps = {
|
||||
props: {
|
||||
...props,
|
||||
...this.fieldsStore.getFieldValuePropValue(fieldMeta),
|
||||
},
|
||||
directives,
|
||||
...restProps,
|
||||
}
|
||||
newProps.domProps.value = newProps.props.value
|
||||
const newEvents = {}
|
||||
Object.keys(newProps.on).forEach((key) => {
|
||||
if (originalEvents[key]) {
|
||||
const triggerEvents = newProps.on[key]
|
||||
newEvents[key] = (...args) => {
|
||||
originalEvents[key](...args)
|
||||
triggerEvents(...args)
|
||||
}
|
||||
}
|
||||
})
|
||||
return cloneElement(fieldElem, { ...newProps, on: newEvents })
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -221,9 +236,8 @@ function createBaseForm (option = {}, mixins = []) {
|
|||
const inputProps = {
|
||||
...this.fieldsStore.getFieldValuePropValue(fieldOption),
|
||||
// ref: name,
|
||||
on: {},
|
||||
}
|
||||
const saveRef = this.getCacheBind(name, `${name}__ref`, this.saveRef)
|
||||
const inputListeners = {}
|
||||
if (fieldNameProp) {
|
||||
inputProps[fieldNameProp] = name
|
||||
}
|
||||
|
@ -231,13 +245,13 @@ function createBaseForm (option = {}, mixins = []) {
|
|||
const validateRules = normalizeValidateRules(validate, rules, validateTrigger)
|
||||
const validateTriggers = getValidateTriggers(validateRules)
|
||||
validateTriggers.forEach((action) => {
|
||||
if (inputProps[action]) return
|
||||
inputProps[action] = this.getCacheBind(name, action, this.onCollectValidate)
|
||||
if (inputListeners[action]) return
|
||||
inputListeners[action] = this.getCacheBind(name, action, this.onCollectValidate)
|
||||
})
|
||||
|
||||
// make sure that the value will be collect
|
||||
if (trigger && validateTriggers.indexOf(trigger) === -1) {
|
||||
inputProps.on[trigger] = this.getCacheBind(name, trigger, this.onCollect)
|
||||
inputListeners[trigger] = this.getCacheBind(name, trigger, this.onCollect)
|
||||
}
|
||||
|
||||
const meta = {
|
||||
|
@ -256,11 +270,16 @@ function createBaseForm (option = {}, mixins = []) {
|
|||
|
||||
return {
|
||||
props: inputProps,
|
||||
domProps: {
|
||||
value: inputProps.value,
|
||||
},
|
||||
directives: [
|
||||
{ name: 'ant-form-item-ref-cal', value: (component) => {
|
||||
saveRef(component)
|
||||
} },
|
||||
{
|
||||
name: 'ant-ref',
|
||||
value: this.getCacheBind(name, `${name}__ref`, this.saveRef),
|
||||
},
|
||||
],
|
||||
on: inputListeners,
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -342,16 +361,16 @@ function createBaseForm (option = {}, mixins = []) {
|
|||
return
|
||||
}
|
||||
this.recoverClearedField(name)
|
||||
const fieldMeta = this.fieldsStore.getFieldMeta(name)
|
||||
if (fieldMeta) {
|
||||
const ref = fieldMeta.ref
|
||||
if (ref) {
|
||||
if (typeof ref === 'string') {
|
||||
throw new Error(`can not set ref string for ${name}`)
|
||||
}
|
||||
ref(component)
|
||||
}
|
||||
}
|
||||
// const fieldMeta = this.fieldsStore.getFieldMeta(name)
|
||||
// if (fieldMeta) {
|
||||
// const ref = fieldMeta.ref
|
||||
// if (ref) {
|
||||
// if (typeof ref === 'string') {
|
||||
// throw new Error(`can not set ref string for ${name}`)
|
||||
// }
|
||||
// ref(component)
|
||||
// }
|
||||
// }
|
||||
this.instances[name] = component
|
||||
},
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@ import createFormField from './createFormField'
|
|||
import formShape from './propTypes'
|
||||
import Vue from 'vue'
|
||||
|
||||
Vue.directive('ant-form-item-ref-cal', {
|
||||
inserted: function (el, binding, vnode) {
|
||||
Vue.directive('ant-ref', {
|
||||
bind: function (el, binding, vnode) {
|
||||
binding.value(vnode)
|
||||
},
|
||||
unbind: function (el, binding, vnode) {
|
||||
|
|
Loading…
Reference in New Issue