var deepClone = function(obj) { let result = Array.isArray(obj) ? [] : {} for (let key in obj) { if (obj.hasOwnProperty(key)) { if (typeof obj[key] === 'object') { result[key] = deepClone(obj[key]) //递归复制 } else { result[key] = obj[key] } } } return result } Vue.component('layout', { template: '#layout', data() { return { pageData: [], selectWg: {} } }, methods: { setSelectWg(data) { this.selectWg = data this.bus.$emit('changeSelectWg', data) }, handleWidgetAdd: function(evt) { const newIndex = evt.newIndex const elKey = Date.now() + '_' + Math.ceil(Math.random() * 1000000) let newObj = deepClone(this.pageData[newIndex]) newObj.key = this.pageData[newIndex].type + '_' + elKey this.$set(this.pageData, newIndex, newObj) this.setSelectWg(this.pageData[newIndex]) }, handleSelectWidget(index) { this.setSelectWg(this.pageData[index]) }, handleWidgetDelete(index) { if (this.pageData.length - 1 === index) { if (index === 0) { this.setSelectWg([]) } else { this.setSelectWg(this.pageData[index - 1]) } } else { this.setSelectWg(this.pageData[index + 1]) } this.$nextTick(() => { this.pageData.splice(index, 1) }) }, handleWidgetClone(index) { let cloneData = deepClone(this.pageData[index]) cloneData.key = this.pageData[index].type + '_' + Date.now() + '_' + Math.ceil(Math.random() * 1000000) this.pageData.splice(index, 0, cloneData) this.$nextTick(() => { this.setSelectWg(this.pageData[index + 1]) }) } }, mounted() {} }) Vue.component('layout-config', { template: '#layout-config', data: function() { return { selectWg: {} } }, mounted() { var that = this this.bus.$on('changeSelectWg', function(data) { that.selectWg = data }) }, methods: { handleSlideRemove(index) { this.selectWg.value.splice(index, 1) }, handleAddSlide() { this.selectWg.value.push({ url: '', image: '' }) } } })