v0.6.1+
<refresh>
为 <scroller>
和 <list>
提供下拉加载功能。用法与特性与 <loading>
类似,<scroller>
和 <list>
的子组件,且只能在被 <scroller>
和 <list>
包含时才能被正确的渲染。
一个简单例子:
<template> <list> <header> <div class="center"> <text style="text-align:center">I am the header</text> </div> </header> <refresh onpullingdown='onpullingdown' onrefresh="onrefresh" display="{{refreshDisplay}}" style="width:750;flex-direction: row;justify-content: center;"> <loading-indicator style="height:160;width:160;color:#3192e1"></loading-indicator> </refresh> <cell class="row" repeat="i in staffs" index="{{$index}}"> <div class="item"> <text>{{i.name}}</text> </div> </cell> </list> </template> <style> .row { width: 750; } .item { justify-content: center; border-bottom-width: 2; border-bottom-color: #c0c0c0; height: 100; padding:20; } .center { border-bottom-width: 2; border-bottom-color: #cccccc; height: 100; padding:20; background-color:#FFFFFF; justify-content: center; } </style> <script> module.exports = { data: { staffs:[], refreshDisplay: 'show', loadingDisplay: 'show', loadingText: 'pull up to load more', refreshText: 'pull down to refresh' }, created:function() { this.refreshDisplay='show' this.staffs=[{name:'inns'},{name:'connon'},{name:'baos'},{name:'anna'},{name:'dolley'},{name:'lucy'},{name:'john'}, {name:'lily'},{name:'locke'},{name:'jack'},{name:'danny'},{name:'rose'},{name:'harris'},{name:'lotus'},{name:'louis'}]; }, methods:{ onrefresh:function(e){ this.refreshDisplay='show'; this.staffs=[{name:'anna'},{name:'baos'},{name:'connon'},{name:'inns'}]; this.refreshDisplay='hide' }, onpullingdown:function(e){ console.log('onpullingdown triggered.'); console.log('dy:'+e.dy); console.log('headerHeight:'+e.headerHeight); console.log('maxHeight:'+e.maxHeight); } } } </script>
display {string}
:可选值为 show
或者 hide
,仅隐藏 <indicator>
,<loading>
其他子组件依然可见,<loading>
事件仍会被触发。支持所有通用样式。
flexbox
布局position
opacity
background-color
查看 组件通用样式
refresh
: 当 <scroller>
/<list>
被下拉时触发。pullingdown
:仅在 Android 支持。当 <scroller>
/<list>
被下拉时触发,可以从事件的参数对象中获取 dy,headerHeight,maxHeight<refresh>
不支持 remove
,v0.9 版本会修复。
display
值为 show
或 hide
。仅隐藏 <indicator>
,<refresh>
其他子组件依然可见,refresh
事件仍会被触发。
如果需要 <refresh>
hide 时隐藏文案并不再触发事件,有两种解决方法:
refresh
事件中添加判断逻辑;remove
解决。只能通过 display
特性进行展示和隐藏,且必须成对出现,即设置 display="show"
,必须有对应的 display="hide"
。
<template> <scroller onloadmore="onloadmore" loadmoreoffset="1000"> <refresh onrefresh="onrefresh" display="{{refreshDisplay}}"> <text id="refreshText">{{refreshText}}</text> </refresh> <div repeat="v in items"> <text style="font-size: 40; color: #000000">{{v.item}}</text> </div> <loading onloading="onloading" display="{{loadingDisplay}}"> <text id="loadingText">{{loadingText}}</text> </loading> </scroller> </template> <script> module.exports = { data: { refreshDisplay: 'show', loadingDisplay: 'show', loadingText: 'pull up to load more', refreshText: 'pull down to refresh', items: [] }, created: function () { for (var i = 0; i < 30; i++) { this.items.push({ 'item': 'test data' + i }); } }, methods: { onrefresh: function () { var vm = this; vm.refreshDisplay = 'show' if (vm.items.length > 50) { vm.refreshText = "no more data!" vm.refreshDisplay = 'hide' return; } var len = vm.items.length; for (var i = len; i < (len + 20); i++) { vm.items.unshift({ 'item': 'test data ' + i }); } vm.refreshDisplay = 'hide' }, onloading: function () { var vm = this; vm.loadingDisplay = 'show' if (vm.items.length > 30) { vm.loadingText = "no more data!" vm.loadingDisplay = 'hide' return; } var len = vm.items.length; for (var i = len; i < (len + 20); i++) { vm.items.push({ 'item': 'test data ' + i }); } vm.loadingDisplay = 'hide' }, onloadmore: function () { console.log("into--[onloadmore]") } } } </script>
更多示例可查看 <list>