/** * uni://form-field */ import { hasOwn } from 'uni-shared' import { emitter } from 'uni-mixins' function created () { this.$dispatch('Form', 'uni-form-group-update', { type: 'add', vm: this }) } function beforeDestroy () { this.$dispatch('Form', 'uni-form-group-update', { type: 'remove', vm: this }) } export default { name: 'uni://form-field', init (options, vm) { if ( !vm.constructor.options.props || !vm.constructor.options.props.name || !vm.constructor.options.props.value ) { // 未初始化 props if (!vm.constructor.options.props) { vm.constructor.options.props = {} } if (!vm.constructor.options.props.name) { vm.constructor.options.props.name = options.props.name = { type: String } } if (!vm.constructor.options.props.value) { vm.constructor.options.props.value = options.props.value = { type: null } } } if (!options.propsData) { options.propsData = {} } const $vnode = vm.$vnode if ($vnode && $vnode.data && $vnode.data.attrs) { if (hasOwn($vnode.data.attrs, 'name')) { options.propsData.name = $vnode.data.attrs.name } if (hasOwn($vnode.data.attrs, 'value')) { options.propsData.value = $vnode.data.attrs.value } } if ( !vm.constructor.options.methods || !vm.constructor.options.methods._getFormData ) { // 未初始化 methods if (!vm.constructor.options.methods) { vm.constructor.options.methods = {} } if (!options.methods) { options.methods = {} } const formMethods = { _getFormData () { return this.name ? { key: this.name, value: this.value } : {} }, _resetFormData () { this.value = '' } } Object.assign(vm.constructor.options.methods, formMethods) Object.assign(options.methods, formMethods) // add $dispatch Object.assign(vm.constructor.options.methods, emitter.methods) Object.assign(options.methods, emitter.methods) const createdHooks = options.created vm.constructor.options.created = options.created = createdHooks ? [].concat(created, createdHooks) : [ created ] const beforeDestroyHooks = options.beforeDestroy vm.constructor.options.beforeDestroy = options.beforeDestroy = beforeDestroyHooks ? [].concat(beforeDestroy, beforeDestroyHooks) : [ beforeDestroy ] } } }