鸿蒙实现三级联动选择框
2023-12-22 11:48:11
import Prompt from '@system.prompt';
import { FirstLevelComponent } from './FirstLevelComponent';
import { SecondLevelComponent } from './SecondLevelComponent';
import { ThirdLevelComponent } from './ThirdLevelComponent';
@CustomDialog
export default struct DataPickerDialog {
@Provide currentFirst: JSON = null;
@Provide currentSecondBean: JSON = null;
@Provide currentThirdBean: JSON = null;
controller: CustomDialogController
title: string = '这是标题' //弹窗的提示文本
@Provide dataSource: JSON[] = null
defaultValue: JSON[] = null
result: JSON[] = [];
aboutToAppear() {
let jsonStr: string = '{"defaultValue":[{"name":"河南省","value":"002"},{"name":"平顶山市","value":"002002"},{"name":"宝丰县","value":"002002002"}],"dataSource":[{"name":"浙江省","value":"001","children":[{"name":"杭州市","value":"001001","children":[{"name":"拱墅区","value":"001001001","children":[]},{"name":"西湖区","value":"001001002","children":[]}]},{"name":"湖州市","value":"001002","children":[{"name":"南浔区","value":"001002001","children":[]},{"name":"吴兴区","value":"001002002","children":[]}]}]},{"name":"河南省","value":"002","children":[{"name":"郑州市","value":"002001","children":[{"name":"金水区","value":"002001001","children":[]},{"name":"二七区","value":"002001002","children":[]}]},{"name":"平顶山市","value":"002002","children":[{"name":"鲁山县","value":"002002001","children":[]},{"name":"宝丰县","value":"002002002","children":[]}]}]},{"name":"河北省省","value":"003","children":[{"name":"石家庄市","value":"003001","children":[{"name":"一一区","value":"003001001","children":[]},{"name":"22区","value":"003001002","children":[]}]},{"name":"保定市","value":"003002","children":[{"name":"三三区","value":"003002001","children":[]},{"name":"四四区","value":"003002002","children":[]}]}]},{"name":"山东省","value":"004","children":[{"name":"青岛市","value":"004001","children":[{"name":"青岛市1区","value":"004001001","children":[]},{"name":"青岛市2区","value":"004001002","children":[]}]},{"name":"济南市","value":"004002","children":[{"name":"济南1区","value":"004002001","children":[]},{"name":"济南2区","value":"004002002","children":[]}]}]}]}'
let json: JSON = JSON.parse(jsonStr);
this.dataSource = json['dataSource']
this.defaultValue = json['defaultValue']
this.currentFirst = this.defaultValue[0];
this.currentSecondBean = this.defaultValue[1];
this.currentThirdBean = this.defaultValue[2];
}
build() {
Column() {
Text(this.title)
.fontSize(25)
.textAlign(TextAlign.Center)
.margin({ top: 10, bottom: 10 });
Row() {
FirstLevelComponent().width('30%');
SecondLevelComponent().width('35%');
ThirdLevelComponent().width('35%');
}.height('40%')
Flex({ justifyContent: FlexAlign.SpaceAround, alignItems: ItemAlign.Center }) {
Button('取消', { type: ButtonType.Normal })
.onClick(() => {
this.controller.close()
})
.backgroundColor(0xffffff)
.fontColor(Color.Black)
.layoutWeight(1)
.height('100%')
Divider()
.vertical(true)
.strokeWidth(1)
.color('#F1F3F5')
.opacity(1)
.height('100%')
Button('确认', { type: ButtonType.Normal })
.onClick(() => {
this.controller.close()
this.currentFirst['children'] = ''
this.currentSecondBean['children'] = ''
this.currentThirdBean['children'] = ''
this.result.push(this.currentFirst)
this.result.push(this.currentSecondBean)
this.result.push(this.currentThirdBean)
console.log("wang", JSON.stringify(this.result))
})
.backgroundColor(0xffffff)
.fontColor(Color.Blue)
.layoutWeight(1)
.height('100%')
}.height(50)
}
}
}
这个是主要页面
@Component
export struct FirstLevelComponent {
@State labelList: string[] = [];
@State select: number = 0;
@Consume currentFirst: JSON;
@Consume dataSource: JSON[];
aboutToAppear() {
for (let i = 0; i < this.dataSource.length; i++) {
this.labelList.push(this.dataSource[i]['name'])
if (this.dataSource[i]['value'] == this.currentFirst['value']) {
this.select = i;
}
}
this.currentFirst = this.dataSource[this.select]
}
build() {
Column() {
Column() {
if (this.labelList.length === 0) {
Text('暂无数据').fontSize(20)
} else {
TextPicker({ range: this.labelList, selected: this.select })
.onChange((value: string, index: number) => {
this.select = index
this.currentFirst = this.dataSource[index]
})
}
}
.backgroundColor(Color.White)
.border({ color: '#e2e2e2', width: { right: 0.5 }
})
.width('100%')
.layoutWeight(1)
.justifyContent(FlexAlign.Center)
}
.height('100%')
}
}
@Component
export struct SecondLevelComponent {
@State mTip: string = '暂无数据'
@Consume @Watch('onFirstChange') currentFirst: JSON;
@Consume currentSecondBean: JSON;
@State labelList: string[] = [];
@State select: number = 0;
build() {
Column() {
Column() {
if (this.labelList.length === 0) {
Text(this.mTip).fontSize(20)
} else {
TextPicker({ range: this.labelList, selected: this.select })
.onChange((value: string, index: number) => {
this.select = index
this.currentSecondBean = this.currentFirst['children'][index]
})
}
}
.backgroundColor(Color.White)
.border({
color: '#e2e2e2',
width: { right: 0.5 }
})
.width('100%')
.layoutWeight(1)
.justifyContent(FlexAlign.Center)
}
.height('100%')
}
onFirstChange() {
if (!this.currentFirst) {
this.mTip = '暂无数据';
} else {
this.labelList = []
for (let i = 0; i < this.currentFirst['children'].length; i++) {
this.labelList.push(this.currentFirst['children'][i]['name'])
if (this.currentFirst['children'][i]['value'] == this.currentSecondBean['value']) {
this.select = i;
}
}
this.currentSecondBean = this.currentFirst['children'][this.select]
}
}
}
@Component
export struct ThirdLevelComponent {
@State mTip: string = '暂无数据'
@Consume @Watch('onFirstChange') currentFirst: JSON;
@Consume @Watch('onSecondChange') currentSecondBean: JSON;
@Consume currentThirdBean: JSON;
@State labelList: string[] = [];
@State select: number = 0;
build() {
Column() {
Column() {
if (this.labelList.length === 0) {
Text(this.mTip).fontSize(20)
} else {
TextPicker({ range: this.labelList, selected: this.select })
.onChange((value: string, index: number) => {
this.select = index
this.currentThirdBean = this.currentSecondBean['children'][this.select]
})
}
}
.backgroundColor(Color.White)
.border({
color: '#e2e2e2',
width: { right: 0.5 }
})
.width('100%')
.layoutWeight(1)
.justifyContent(FlexAlign.Center)
}
.height('100%')
}
onFirstChange() {
}
onSecondChange() {
if (!this.currentSecondBean) {
this.mTip = '暂无数据';
} else {
this.labelList = []
for (let i = 0; i < this.currentSecondBean['children'].length; i++) {
this.labelList.push(this.currentSecondBean['children'][i]['name'])
if (this.currentSecondBean['children'][i]['value'] == this.currentThirdBean['value']) {
this.select = i;
}
}
this.currentThirdBean = this.currentSecondBean['children'][this.select]
}
}
}
文章来源:https://blog.csdn.net/hasayaqimomo/article/details/135090534
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!