From 12b59d5c8fa81307f912809811e3d96b8e4e404c Mon Sep 17 00:00:00 2001 From: li-ti-ti <53905935+li-ti-ti@users.noreply.github.com> Date: Thu, 8 Aug 2019 22:55:31 +0800 Subject: [PATCH] Create radio-group.js --- .../runtime/components/radio-group.js | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 src/platforms/app-plus-nvue/runtime/components/radio-group.js diff --git a/src/platforms/app-plus-nvue/runtime/components/radio-group.js b/src/platforms/app-plus-nvue/runtime/components/radio-group.js new file mode 100644 index 000000000..da3164eeb --- /dev/null +++ b/src/platforms/app-plus-nvue/runtime/components/radio-group.js @@ -0,0 +1,103 @@ +import { + emitter, + listeners +} from '../mixins' + +function getRadioGroup (weex) { + return { + name: 'RadioGroup', + mixins: [emitter, listeners], + props: { + name: { + type: String, + default: '' + } + }, + data: function data () { + return { + radioList: [] + } + }, + listeners: { + '@radio-change': '_changeHandler', + '@radio-group-update': '_radioGroupUpdateHandler' + }, + mounted () { + this._resetRadioGroupValue(this.radioList.length - 1) + }, + created () { + this.$dispatch('Form', 'uni-form-group-update', { + type: 'add', + vm: this + }) + }, + beforeDestroy () { + this.$dispatch('Form', 'uni-form-group-update', { + type: 'remove', + vm: this + }) + }, + methods: { + _changeHandler ($event, vm) { + const index = this.radioList.indexOf(vm) + this._resetRadioGroupValue(index, true) + this.$trigger('change', { + value: vm.radioValue + }) + }, + _radioGroupUpdateHandler ($event) { + if ($event.type === 'add') { + this.radioList.push($event.vm) + } + else { + const index = this.radioList.indexOf($event.vm) + this.radioList.splice(index, 1) + } + }, + _resetRadioGroupValue (key, change) { + const _this = this + + this.radioList.forEach(function (value, index) { + if (index === key) { + return + } + if (change) { + _this.radioList[index].radioChecked = false + } + else { + _this.radioList.forEach(function (v, i) { + if (index >= i) { + return + } + if (_this.radioList[i].radioChecked) { + _this.radioList[index].radioChecked = false + } + }) + } + }) + }, + _getFormData () { + const data = {} + if (this.name !== '') { + let value = '' + this.radioList.forEach(function (vm) { + if (vm.radioChecked) { + value = vm.value + } + }) + data['value'] = value + data['key'] = this.name + } + return data + } + }, + render (createElement) { + const _vm = this + return createElement('div', _vm._g({}, _vm.$listeners), [_vm._t('default')], 2) + } + } +} + +export default function init (Vue, weex) { + Vue.component('radio-group', getRadioGroup(weex)) +} -- GitLab