Component({ /** * 组件的属性列表 * data: [{name:'标题',key:'字段key',data:[{ label:'', vlaue:'',children:[] }]}], 数据源 * active: {'key':''}, 当前选中 * menuTextAlign, 是否居中标题 */ properties: { data: { type: Array, value: [], }, active: { type: Object, value: {}, }, menuTextAlign: { type: Boolean, value: false, }, }, /** * 组件的初始数据 */ data: { myActive: {}, // 当前选择的value,用于校验切换时重置 dataIndex: null, // 当前选中的data数据的下标 dataActive: { data: [] }, activeName: {}, // 选中的标题 }, observers: { active: function (data) { let visible = false; for (let item in this.data.myActive) { if (this.data.myActive[item] !== data[item] && this.data.myActive[item]) { visible = true; } } if (visible) this.setData({ activeName: {} }); }, }, /** * 组件的方法列表 */ methods: { // 选择item _handleClickItem(e) { let item = e.currentTarget.dataset.item; if (item.children) { // 存在子集则是标题不可选择 return; } this.data.activeName[this.data.dataActive.key] = item.label; let activeCopy = { ...this.data.active }; activeCopy[this.data.dataActive.key] = item.value; this.data.myActive[this.data.dataActive.key] = item.value; this.triggerEvent('ongetvalue', activeCopy); this.setData({ activeName: this.data.activeName, dataIndex: null, dataActive: { data: [] }, myActive: this.data.myActive }); }, // 选择 _handleSelectData(e) { let index = e.currentTarget.dataset.index; this.setData({ dataIndex: index, dataActive: this.data.data[index] }); }, // 取消 _handleClose() { this.setData({ dataIndex: null, dataActive: { data: [] } }); }, }, });