文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

从微信小程序到鸿蒙JS开发【04】-list组件

2024-12-03 11:55

关注

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/

1、可滚动区域

在许多场景中,页面会有一块区域是可滚动的,比如这样一个简单的每日新闻模块:


上面的新闻类型是一块可横向滚动的区域,下方新闻列表是一块可竖向滚动的区域。在微信小程序中,使用scroll-view组件即可实现。那么在鸿蒙js组件中,想要实现可滚动的区域,则是使用list组件。list仅支持竖向滚动,横向滚动要用tabs,将在下篇博客讲解。

2、list + list-item

这里以本地新闻模块为例,数据请求自天行数据接口(https://www.tianapi.com/apiview/154)。


上方为一个搜索框,下方是新闻列表。搜索框给了固定高度,那么怎样让新闻列表能够占满屏幕剩余部分呢?只需将父容器设置flex布局,list设置flex: 1即可。list下直接放list-item,在总高度超出list的高度后,即可上下滚动。

hml:

  1. -- 本地新闻 --> 
  2.  
     
  3.      "searchView"
  4.          "{{ searchIcon }}"
  5.          "搜你想看的"
  6.      
 
  •      "localView"
  •          for="{{ localNews }}"
  •              "newsItem"
  •                  "newsContent"
  •                       
  •                          {{ $item.title }} 
  •                       
  •                      "newsDesc"
  •                           
  •                              {{ $item.source }} 
  •                           
  •                           
  •                              {{ $item.ctime }} 
  •                           
  •                      
  •  
  •                   
  •               
  •           
  •       
  •   
  •  -- 本地新闻end --> 
  • css:

    1.  
    2. .searchView { 
    3.     width: 100%; 
    4.     height: 140px; 
    5.     background-color: #f0f0f0; 
    6.     display: flex; 
    7.     align-items: center; 
    8. .searchView>image { 
    9.     margin: 0 40px 0 40px; 
    10.     height: 60px; 
    11.     width: 60px; 
    12. .searchView>input { 
    13.     margin-right: 40px; 
    14. .localView { 
    15.     width: 100%; 
    16.     flex: 1; 
    17.     display: flex; 
    18.     flex-direction: column
    19. .localContent { 
    20.     margin-left: 20px; 
    21. .newsItem { 
    22.     width: 100%; 
    23.     height: 240px; 
    24.     border-bottom: 1px solid #bbbbbb; 
    25.     display: flex; 
    26.     align-items: center; 
    27. .newsContent { 
    28.     display: flex; 
    29.     flex-direction: column
    30.     margin-right: 20px; 
    31.     margin-left: 20px; 
    32. .newsContent>text { 
    33.     margin-top: 20px; 
    34.     height: 140px; 
    35.     font-size: 34px; 
    36.     color: #333333; 
    37. .newsDesc { 
    38.     height: 60px; 
    39.     line-height: 60px; 
    40.     display: flex; 
    41.     justify-content: space-between
    42. .newsDesc>text { 
    43.     font-size: 28px; 
    44.     color: #777777; 

     js:

    1. searchLocalNews() { 
    2.      let url = 'http://api.tianapi.com/areanews/index?key=xxxx&areaname=江苏'
    3.      if (this.searchWord) { 
    4.          url = url + '&word' + this.searchWord; 
    5.      } 
    6.      fetch.fetch({ 
    7.          url: url, 
    8.          responseType: 'json'
    9.          success: res => { 
    10.              let data = JSON.parse(res.data); 
    11.              this.localNews = data.newslist; 
    12.          } 
    13.      }) 
    14.  }, 

     新闻列表可滚动,且不会影响搜索框的位置。


    3、list + list-item-group + list-item

    list组件的子元素还可以是list-item-group,顾名思义应是分组列表项,list-item作为list-item-group的子元素。随便写一点看一看:

    1.  
    2.         "manageList"
    3.             group class="list-item-group"
    4.                 "list-item"
    5.                      
    6.                         分组1 子项1 
    7.                      
    8.                  
    9.                 "list-item"
    10.                      
    11.                         分组1 子项2 
    12.                      
    13.                  
    14.                 "list-item"
    15.                      
    16.                         分组1 子项3 
    17.                      
    18.                  
    19.             group
    20.             group class="list-item-group"
    21.                 "list-item"
    22.                      
    23.                         分组2 子项1 
    24.                      
    25.                  
    26.                 "list-item"
    27.                      
    28.                         分组2 子项2 
    29.                      
    30.                  
    31.                 "list-item"
    32.                      
    33.                         分组2 子项3 
    34.                      
    35.                  
    36.             group
    37.          
    38.      

    1. .manageList{ 
    2.     height: 100%; 
    3.     width: 100%; 
    4. .list-item-group
    5.     width: 100%; 
    6.     height: 450px; 
    7. .list-item{ 
    8.     width: 100%; 
    9.     height: 150px; 
    10.     display: flex; 
    11.     justify-content: center; 
    12.     align-items: center; 
    13.     border-bottom: 1px solid gray; 
    14. .list-item>text{ 
    15.     line-height: 100px; 

      

     

    可以看出,list-item-group是可折叠的列表分组,且默认是折叠的。点击右侧小箭头可展开列表,如果list-item-group给了高度,则折叠和展开后这一块区域的高度不变。在折叠时,展示第一个list-item的内容。

    那么如果每一个list-item-group中list-item数目不固定,在展开后的布局就会很难看。如下:


    其实不定义list-item-group的高度即可,折叠高度为list-item的高度,展开后高度自适应增长,超出list高度可以滚动,功能还是很强大的。更改css后的效果如下:


     

    这种分组的列表,可以制作一个简单的后台管理系统菜单界面。这里我将菜单数据文件、图片文件放入nginx服务器的目录中,再通过内网穿透访问资源。注意数据的格式,list-item-group和list-item之间存在父级标签关系,故数据中也应存在父级关系。list-item-group展示的内容是其下第一个list-item,这里用一个两重for循环实现:



    manage.json:

    1.     "manageList": [ 
    2.         { 
    3.             "name""组织管理"
    4.             "icon""http://milkytea.free.idcfengye.com/images/christools/icon/org.png"
    5.             "subList": [ 
    6.                 { 
    7.                     "name""查询组织"
    8.                     "icon""http://milkytea.free.idcfengye.com/images/christools/icon/search.png" 
    9.                 }, 
    10.                 { 
    11.                     "name""添加组织"
    12.                     "icon""http://milkytea.free.idcfengye.com/images/christools/icon/add.png" 
    13.                 }, 
    14.                 { 
    15.                     "name""删除组织"
    16.                     "icon""http://milkytea.free.idcfengye.com/images/christools/icon/delete.png" 
    17.                 } 
    18.             ] 
    19.         }, 
    20.         { 
    21.             "name""人员管理"
    22.             "icon""http://milkytea.free.idcfengye.com/images/christools/icon/person.png"
    23.             "subList": [ 
    24.                 { 
    25.                     "name""查询人员"
    26.                     "icon""http://milkytea.free.idcfengye.com/images/christools/icon/search.png" 
    27.                 }, 
    28.                 { 
    29.                     "name""添加人员"
    30.                     "icon""http://milkytea.free.idcfengye.com/images/christools/icon/add.png" 
    31.                 }, 
    32.                 { 
    33.                     "name""批量导入人员"
    34.                     "icon""http://milkytea.free.idcfengye.com/images/christools/icon/add.png" 
    35.                 }, 
    36.                 { 
    37.                     "name""删除人员"
    38.                     "icon""http://milkytea.free.idcfengye.com/images/christools/icon/delete.png" 
    39.                 }, 
    40.                 { 
    41.                     "name""修改人员"
    42.                     "icon""http://milkytea.free.idcfengye.com/images/christools/icon/update.png" 
    43.                 } 
    44.             ] 
    45.         }, 
    46.         { 
    47.             "name""卡片管理"
    48.             "icon""http://milkytea.free.idcfengye.com/images/christools/icon/card.png"
    49.             "subList": [ 
    50.                 { 
    51.                     "name""开卡"
    52.                     "icon""http://milkytea.free.idcfengye.com/images/christools/icon/add.png" 
    53.                 }, 
    54.                 { 
    55.                     "name""退卡"
    56.                     "icon""http://milkytea.free.idcfengye.com/images/christools/icon/delete.png" 
    57.                 } 
    58.             ] 
    59.         } 
    60.     ] 

     hml:

    1. -- 管理 --> 
    2.      
       
    3.          "manageList"
    4.              for="{{ manageList }}"
    5.                  group class="list-item-group"
    6.                      "list-item"
    7.                          "{{ $item.icon }}"
    8.                          {{ $item.name }} 
    9.                       
    10.                      for="{{ (index, value) in $item.subList }}"
    11.                          "list-item"
    12.                              "{{ value.icon }}"
    13.                              {{ value.name }} 
    14.                           
    15.                       
    16.                  group
    17.               
    18.           
    19.       
    20.      -- 管理end --> 

    js:

    1. getManageList() { 
    2.        let url = "http://milkytea.free.idcfengye.com/text/manage.json"
    3.        fetch.fetch({ 
    4.            url: url, 
    5.            responseType: 'json'
    6.            success: res => { 
    7.                let data = JSON.parse(res.data); 
    8.                this.manageList = data.manageList; 
    9.            } 
    10.        }) 
    11.    } 

     想了解更多内容,请访问:

    51CTO和华为官方合作共建的鸿蒙技术社区

    https://harmonyos.51cto.com/

     

    来源:鸿蒙社区内容投诉

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    软考中级精品资料免费领

    • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

      难度     813人已做
      查看
    • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

      难度     354人已做
      查看
    • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

      难度     318人已做
      查看
    • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

      难度     435人已做
      查看
    • 2024年上半年系统架构设计师考试综合知识真题

      难度     224人已做
      查看

    相关文章

    发现更多好内容

    猜你喜欢

    AI推送时光机
    位置:首页-资讯-后端开发
    咦!没有更多了?去看看其它编程学习网 内容吧
    首页课程
    资料下载
    问答资讯