当前位置:   article > 正文

低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码_arkui读取json文件

arkui读取json文件

直接在线API的JSON转TS代码

image.png

低代码实现鸿蒙API调用快速生成ArkUI代码只需要调用你的API接口返回JSON结构的数据,在线绑定变量后,采用了axios鸿蒙扩展插件来加载远程API。

生成的代码如下,程序可能也还有些不足之处,欢迎吐槽,不断优化完善。

  1. import {
  2. navigateTo
  3. } from '../common/Page'
  4. import axios, {
  5. AxiosResponse
  6. } from '@ohos/axios'
  7. interface IDataDataAttr {
  8. "title": string
  9. }
  10. interface IDataData {
  11. "img": string,
  12. "remark": string,
  13. "id": number,
  14. "title": string,
  15. "attr": IDataDataAttr
  16. }
  17. interface IData {
  18. "msg": string,
  19. "code": number,
  20. "data": IDataData[]
  21. }
  22. @Entry
  23. @Component
  24. export struct Index {
  25. @State data: IData = {
  26. "code": 0,
  27. "msg": "",
  28. "data": [{
  29. "title": "",
  30. "remark": "",
  31. "id": 0,
  32. "attr": {
  33. "title": ""
  34. },
  35. "img": ""
  36. }]
  37. }
  38. async dataApi() {
  39. try {
  40. const response: AxiosResponse = await axios.post < IData,
  41. AxiosResponse < IData > , null > ('https://php.diygw.com/article.php');
  42. this.data = response ? response.data : null
  43. } catch (error) {
  44. console.error(JSON.stringify(error));
  45. }
  46. }
  47. async onPageShow() {
  48. await this.dataApi()
  49. }
  50. async aboutToAppear() {
  51. await this.onPageShow()
  52. }
  53. build() {
  54. Row() {
  55. Navigation() {
  56. Column() {
  57. Scroll() {
  58. Column() {
  59. Grid() {
  60. ForEach(this.data.data, (item) => {
  61. GridItem() {
  62. Column({
  63. space: 5
  64. }) {
  65. Image(item.img).objectFit(ImageFit.Fill).width('42vp').height('42vp')
  66. Text(item.title).fontSize('12fp').width('100%').textAlign(TextAlign.Center)
  67. }.width('100%')
  68. }
  69. }, item => JSON.stringify(item));
  70. }.padding({
  71. top: '10vp',
  72. bottom: '10vp'
  73. }).height(this.data.data.length / 3 * 91 + 20).columnsTemplate('1fr 1fr 1fr ')
  74. .rowsGap(15).layoutDirection(GridDirection.Row)
  75. .width('100%')
  76. List() {
  77. ListItem() {
  78. Flex({
  79. direction: FlexDirection.Row,
  80. alignItems: ItemAlign.Center,
  81. }) {
  82. Image($r('app.media.grid1')).flexShrink(0).objectFit(ImageFit.Fill).width('42vp').height('42vp')
  83. Column() {
  84. Text('菜单一111').fontSize('14fp').width('100%')
  85. Text('说明文字').fontSize('12fp').width('100%')
  86. }.padding({
  87. left: 5
  88. })
  89. Image($r('app.media.ic_arrow')).flexShrink(0).objectFit(ImageFit.Contain).width('12vp').height('24vp')
  90. }.width('100%')
  91. }.padding(15).borderWidth({
  92. bottom: 1
  93. }).borderColor('#efefef')
  94. ListItem() {
  95. Flex({
  96. direction: FlexDirection.Row,
  97. alignItems: ItemAlign.Center,
  98. }) {
  99. Image($r('app.media.grid2')).flexShrink(0).objectFit(ImageFit.Fill).width('42vp').height('42vp')
  100. Column() {
  101. Text('菜单二').fontSize('14fp').width('100%')
  102. Text('说明文字').fontSize('12fp').width('100%')
  103. }.padding({
  104. left: 5
  105. })
  106. Image($r('app.media.ic_arrow')).flexShrink(0).objectFit(ImageFit.Contain).width('12vp').height('24vp')
  107. }.width('100%')
  108. }.padding(15).borderWidth({
  109. bottom: 1
  110. }).borderColor('#efefef')
  111. ListItem() {
  112. Flex({
  113. direction: FlexDirection.Row,
  114. alignItems: ItemAlign.Center,
  115. }) {
  116. Image($r('app.media.grid3')).flexShrink(0).objectFit(ImageFit.Fill).width('42vp').height('42vp')
  117. Column() {
  118. Text('菜单三').fontSize('14fp').width('100%')
  119. Text('说明文字').fontSize('12fp').width('100%')
  120. }.padding({
  121. left: 5
  122. })
  123. Image($r('app.media.ic_arrow')).flexShrink(0).objectFit(ImageFit.Contain).width('12vp').height('24vp')
  124. }.width('100%')
  125. }.padding(15).borderWidth({
  126. bottom: 1
  127. }).borderColor('#efefef')
  128. }
  129. .width('100%')
  130. }.alignItems(HorizontalAlign.Start)
  131. }
  132. }.height('100%').alignItems(HorizontalAlign.Start).backgroundColor('#fff')
  133. }
  134. .width('100%')
  135. .height('100%')
  136. .backgroundColor('#07c160')
  137. .title(this.NavigationTitle())
  138. .titleMode(NavigationTitleMode.Mini)
  139. .align(Alignment.Center)
  140. .hideBackButton(true)
  141. }.width('100%').height('100%')
  142. }
  143. @Builder
  144. NavigationTitle() {
  145. Column() {
  146. Text('首页')
  147. .width('100%')
  148. .textAlign(TextAlign.Center)
  149. .height('28vp')
  150. .fontSize('20fp')
  151. .fontWeight(500)
  152. .fontColor('#fff')
  153. }
  154. }
  155. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/289915
推荐阅读
相关标签
  

闽ICP备14008679号