ui-js-components-list.md 6.7 KB
Newer Older
H
HelloCrease 已提交
1
# list开发指导
Z
zengyawen 已提交
2

H
HelloCrease 已提交
3
list是用来显示列表的组件,包含一系列相同宽度的列表项,适合连续、多行地呈现同类数据。具体用法请参考[list API](../reference/arkui-js/js-components-container-list.md)
Z
zengyawen 已提交
4 5


H
HelloCrease 已提交
6
## 创建list组件
Z
zengyawen 已提交
7

H
HelloCrease 已提交
8
在pages/index目录下的hml文件中创建一个list组件。
Z
zengyawen 已提交
9

H
HelloCrease 已提交
10 11
```html
<!-- xxx.hml -->
Z
zengyawen 已提交
12
<div class="container"> 
W
wangshuainan1 已提交
13 14
 <list>    
   <list-item class="listItem"></list-item>
Z
zengyawen 已提交
15 16 17 18 19
   <list-item class="listItem"></list-item>
   <list-item class="listItem"></list-item>
   <list-item class="listItem"></list-item>
 </list>
</div>
Z
zengyawen 已提交
20 21
```

H
HelloCrease 已提交
22
```css
Z
zengyawen 已提交
23 24
/* xxx.css */
.container {
W
wangshuainan1 已提交
25 26
  width:100%;
  height:100%;
Z
zengyawen 已提交
27 28 29 30 31 32 33 34 35 36 37 38 39
  flex-direction: column;
  align-items: center;
  background-color: #F1F3F5;
}
.listItem{
  height: 20%;
  background-color:#d2e0e0;
  margin-top: 20px;
}
```

![zh-cn_image_0000001211071477](figures/zh-cn_image_0000001211071477.png)

H
HelloCrease 已提交
40
> **说明:**
Z
zengyawen 已提交
41
> - &lt;list-item-group&gt;是&lt;list&gt;的子组件,实现列表分组功能,不能再嵌套&lt;list&gt;,可以嵌套&lt;list-item&gt;。
H
HelloCrease 已提交
42
>
Z
zengyawen 已提交
43 44 45 46 47 48 49
> - &lt;list-item&gt;是&lt;list&gt;的子组件,展示列表的具体项。


## 添加滚动条

设置scrollbar属性为on即可在屏幕右侧生成滚动条,实现长列表或者屏幕滚动等效果。

H
HelloCrease 已提交
50 51
```html
<!-- xxx.hml -->
Z
zengyawen 已提交
52 53 54 55 56 57 58 59 60 61
<div class="container">
  <list class="listCss" scrollbar="on" >
    <list-item class="listItem"></list-item>
    <list-item class="listItem"></list-item>
    <list-item class="listItem"></list-item>
    <list-item class="listItem"></list-item>
    <list-item class="listItem"></list-item>
    <list-item class="listItem"></list-item>
 </list>
</div> 
Z
zengyawen 已提交
62 63
```

H
HelloCrease 已提交
64 65
```css
/* xxx.css */
Z
zengyawen 已提交
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
.container {
  flex-direction: column;
  background-color: #F1F3F5;
}
.listItem{
  height: 20%;
  background-color:#d2e0e0;
  margin-top: 20px;
}
.listCss{
  height: 100%;
  scrollbar-color: #8e8b8b;
  scrollbar-width: 50px;
}
```

![zh-cn_image_0000001163212980](figures/zh-cn_image_0000001163212980.gif)


## 添加侧边索引栏

设置indexer属性为自定义索引时,索引栏会显示在列表右边界处,indexer属性设置为true,默认为字母索引表。

H
HelloCrease 已提交
89 90
```html
<!-- xxx.hml -->
Z
zengyawen 已提交
91 92 93 94 95
<div class="container">   
  <list class="listCss"  indexer="{{['#','1','2','3','4','5','6','7','8']}}" >  
    <list-item class="listItem"  section="#" ></list-item>   
  </list>
</div>
Z
zengyawen 已提交
96 97
```

H
HelloCrease 已提交
98 99
```css
/* xxx.css */
Z
zengyawen 已提交
100 101
.container{
  flex-direction: column;
Z
zengyawen 已提交
102
  background-color: #F1F3F5;
Z
zengyawen 已提交
103 104 105 106 107 108
 } 
.listCss{
  height: 100%;    
  flex-direction: column;
  columns: 1
}
Z
zengyawen 已提交
109 110 111 112
```

![zh-cn_image_0000001166432552](figures/zh-cn_image_0000001166432552.png)

H
HelloCrease 已提交
113
> **说明:**
Z
zengyawen 已提交
114
> - indexer属性生效需要flex-direction属性配合设置为column,且columns属性设置为1。
H
HelloCrease 已提交
115
>
Z
zengyawen 已提交
116 117 118 119 120
> - indexer可以自定义索引表,自定义时"\#"必须要存在。


## 实现列表折叠和展开

H
HelloCrease 已提交
121
为list组件添加groupcollapse和groupexpand事件实现列表的折叠和展开。
Z
zengyawen 已提交
122

H
HelloCrease 已提交
123 124
```html
<!-- xxx.hml -->
Z
zengyawen 已提交
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
<div class="doc-page">
  <list style="width: 100%;" id="mylist">
    <list-item-group for="listgroup in list" id="{{listgroup.value}}" ongroupcollapse="collapse" ongroupexpand="expand">
      <list-item type="item" style="background-color:#FFF0F5;height:95px;">
        <div class="item-group-child">
          <text>One---{{listgroup.value}}</text>
        </div>
      </list-item>
      <list-item type="item" style="background-color: #87CEFA;height:145px;" primary="true">
        <div class="item-group-child">
          <text>Primary---{{listgroup.value}}</text>
        </div>
      </list-item>
    </list-item-group>
  </list>
</div>
```

H
HelloCrease 已提交
143 144
```css
/* xxx.css */
Z
zengyawen 已提交
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
.doc-page {
  flex-direction: column;
  background-color: #F1F3F5;
}
list-item{
margin-top:30px;
}
.top-list-item {
  width:100%;
  background-color:#D4F2E7;
}
.item-group-child {
  justify-content: center;
  align-items: center;
  width:100%;
}
```

H
HelloCrease 已提交
163
```js
Z
zengyawen 已提交
164
// xxx.js
165
import promptAction from '@ohos.promptAction';
Z
zengyawen 已提交
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
export default {
  data: {
    direction: 'column',
    list: []
  },
  onInit() {
    this.list = []
    this.listAdd = []
    for (var i = 1; i <= 2; i++) {
      var dataItem = {
        value: 'GROUP' + i,
      };
        this.list.push(dataItem);
    }
  },
  collapse(e) {
182
    promptAction.showToast({
Z
zengyawen 已提交
183 184 185 186
      message: 'Close ' + e.groupid
    })
  },
  expand(e) {
187
    promptAction.showToast({
Z
zengyawen 已提交
188 189 190 191 192 193 194 195
    message: 'Open ' + e.groupid
    })
  }
}
```

![zh-cn_image_0000001162911958](figures/zh-cn_image_0000001162911958.gif)

H
HelloCrease 已提交
196
> **说明:**
W
wangshuainan1 已提交
197
>
Z
zengyawen 已提交
198 199 200 201 202 203 204 205
> - groupcollapse和groupexpand事件仅支持list-item-group组件使用。


## 场景示例

在本场景中,开发者可以根据字母索引表查找对应联系人。


H
HelloCrease 已提交
206 207
```html
<!-- xxx.hml -->
Z
zengyawen 已提交
208 209 210 211 212 213 214 215 216
<div class="doc-page"> 
  <text style="font-size: 35px; font-weight: 500; text-align: center; margin-top: 20px; margin-bottom: 20px;"> 
      <span>Contacts</span> 
  </text> 
  <list class="list" indexer="true"> 
    <list-item class="item" for="{{namelist}}" type="{{$item.section}}" section="{{$item.section}}"> 
      <div class="container"> 
        <div class="in-container"> 
          <text class="name">{{$item.name}}</text> 
H
HelloCrease 已提交
217
          <text class="number">18888888888</text> 
Z
zengyawen 已提交
218 219 220 221 222 223 224 225 226 227 228 229 230
        </div> 
      </div> 
    </list-item> 
    <list-item type="end" class="item"> 
      <div style="align-items:center;justify-content:center;width:750px;"> 
        <text style="text-align: center;">Total: 10</text> 
      </div> 
    </list-item> 
  </list> 
</div>
```


H
HelloCrease 已提交
231 232
```css
/* xxx.css */
Z
zengyawen 已提交
233
.doc-page {
W
wangshuainan 已提交
234 235
  width: 100%;
  height: 100%;
Z
zengyawen 已提交
236 237 238 239 240
  flex-direction: column;
  background-color: #F1F3F5;
}
.list {
  width: 100%;
W
wangshuainan 已提交
241 242
  height: 90%;
  flex-grow: 1;
Z
zengyawen 已提交
243 244 245 246 247 248 249 250 251 252
}
.item {
  height: 120px;
  padding-left: 10%;
  border-top: 1px solid #dcdcdc;
}
.name {
  color: #000000;
  font-size: 39px;
}
H
HelloCrease 已提交
253
.number {
Z
zengyawen 已提交
254 255 256 257 258 259 260 261 262 263 264 265 266 267
  color: black;
  font-size: 25px;
}
.container {
  flex-direction: row;
  align-items: center;
}
.in-container {
  flex-direction: column;
  justify-content: space-around;
}
```


H
HelloCrease 已提交
268
```js
Z
zengyawen 已提交
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309
// xxx.js
export default { 
   data: { 
     namelist:[{ 
       name: 'Zoey', 
       section:'Z' 
     },{ 
       name: 'Quin', 
       section:'Q' 
     },{ 
       name:'Sam', 
       section:'S' 
     },{ 
       name:'Leo', 
       section:'L' 
     },{ 
       name:'Zach', 
       section:'Z' 
     },{ 
       name:'Wade', 
       section:'W' 
     },{ 
       name:'Zoe', 
       section:'Z' 
     },{ 
        name:'Warren', 
        section:'W' 
     },{ 
        name:'Kyle', 
        section:'K' 
     },{ 
       name:'Zaneta', 
       section:'Z' 
     }] 
   }, 
   onInit() { 
   } 
 }
```


Z
zengyawen 已提交
310
![zh-cn_image_0000001234287779](figures/zh-cn_image_0000001234287779.gif)
311 312 313 314


## 相关实例

H
HelloCrease 已提交
315
针对list开发,有以下相关实例可供参考:
316

Z
zwx1094577 已提交
317
- [`JsComponentCollection`:JS组件集合(JS)(API9)](https://gitee.com/openharmony/applications_app_samples/tree/master/code/UI/JsComponentClollection/JsComponentCollection)