| <template> | 
|     <!-- #ifdef APP-NVUE --> | 
|     <cell> | 
|         <!-- #endif --> | 
|         <view | 
|             class="u-list-item" | 
|             :ref="`u-list-item-${anchor}`" | 
|             :anchor="`u-list-item-${anchor}`" | 
|             :class="[`u-list-item-${anchor}`]" | 
|         > | 
|             <slot /> | 
|         </view> | 
|         <!-- #ifdef APP-NVUE --> | 
|     </cell> | 
|     <!-- #endif --> | 
| </template> | 
|   | 
| <script> | 
|     import props from './props.js'; | 
|     // #ifdef APP-NVUE | 
|     const dom = uni.requireNativePlugin('dom') | 
|     // #endif | 
|     /** | 
|      * List 列表 | 
|      * @description 该组件为高性能列表组件 | 
|      * @tutorial https://www.uviewui.com/components/list.html | 
|      * @property {String | Number}    anchor    用于滚动到指定item | 
|      * @example <u-list-ite v-for="(item, index) in indexList" :key="index" ></u-list-item> | 
|      */ | 
|     export default { | 
|         name: 'u-list-item', | 
|         mixins: [uni.$u.mpMixin, uni.$u.mixin,props], | 
|         data() { | 
|             return { | 
|                 // 节点信息 | 
|                 rect: {}, | 
|                 index: 0, | 
|                 show: true, | 
|                 sys: uni.$u.sys() | 
|             } | 
|         }, | 
|         computed: { | 
|   | 
|         }, | 
|         inject: ['uList'], | 
|         watch: { | 
|             // #ifndef APP-NVUE | 
|             'uList.innerScrollTop'(n) { | 
|                 const preLoadScreen = this.uList.preLoadScreen | 
|                 const windowHeight = this.sys.windowHeight | 
|                 if(n <= windowHeight * preLoadScreen) { | 
|                     this.parent.updateOffsetFromChild(0) | 
|                 } else if (this.rect.top <= n - windowHeight * preLoadScreen) { | 
|                     this.parent.updateOffsetFromChild(this.rect.top) | 
|                 } | 
|             } | 
|             // #endif | 
|         }, | 
|         created() { | 
|             this.parent = {} | 
|         }, | 
|         mounted() { | 
|             this.init() | 
|         }, | 
|         methods: { | 
|             init() { | 
|                 // 初始化数据 | 
|                 this.updateParentData() | 
|                 this.index = this.parent.children.indexOf(this) | 
|                 this.resize() | 
|             }, | 
|             updateParentData() { | 
|                 // 此方法在mixin中 | 
|                 this.getParentData('u-list') | 
|             }, | 
|             resize() { | 
|                 this.queryRect(`u-list-item-${this.anchor}`).then(size => { | 
|                     const lastChild = this.parent.children[this.index - 1] | 
|                     this.rect = size | 
|                     const preLoadScreen = this.uList.preLoadScreen | 
|                     const windowHeight = this.sys.windowHeight | 
|                     // #ifndef APP-NVUE | 
|                     if (lastChild) { | 
|                         this.rect.top = lastChild.rect.top + lastChild.rect.height | 
|                     } | 
|                     if (size.top >= this.uList.innerScrollTop + (1 + preLoadScreen) * windowHeight) this.show = | 
|                         false | 
|                     // #endif | 
|                 }) | 
|             }, | 
|             // 查询元素尺寸 | 
|             queryRect(el) { | 
|                 return new Promise(resolve => { | 
|                     // #ifndef APP-NVUE | 
|                     this.$uGetRect(`.${el}`).then(size => { | 
|                         resolve(size) | 
|                     }) | 
|                     // #endif | 
|   | 
|                     // #ifdef APP-NVUE | 
|                     const ref = this.$refs[el] | 
|                     dom.getComponentRect(ref, res => { | 
|                         resolve(res.size) | 
|                     }) | 
|                     // #endif | 
|                 }) | 
|             } | 
|         } | 
|     } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|     @import "../../libs/css/components.scss"; | 
|   | 
|     .u-list-item {} | 
| </style> |