<template> <!-- #ifdef APP-NVUE --> <cell ref="uv-index-item"> <!-- #endif --> <view class="uv-index-item" :id="`uv-index-item-${id}`" :class="[`uv-index-item-${id}`]" > <slot /> </view> <!-- #ifdef APP-NVUE --> </cell> <!-- #endif --> </template> <script> import mpMixin from '@/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js' import mixin from '@/uni_modules/uv-ui-tools/libs/mixin/mixin.js' // #ifdef APP-NVUE // 由于weex为阿里的KPI业绩考核的产物,所以不支持百分比单位,这里需要通过dom查询组件的宽度 const dom = uni.requireNativePlugin('dom') // #endif /** * IndexItem * @description * @tutorial https://www.uvui.cn/components/indexList.html * @property {String} * @event {Function} * @example */ export default { name: 'uv-index-item', mixins: [mpMixin, mixin], data() { return { // 本组件到滚动条顶部的距离 top: 0, height: 0, id: '' } }, created() { // 子组件uv-index-anchor的实例 this.anchor = {} }, mounted() { this.init() }, methods: { init() { // 此处会活动父组件实例,并赋值给实例的parent属性 this.getParentData('uv-index-list') if (!this.parent) { return this.$uv.error('uv-index-item必须要搭配uv-index-list组件使用') } this.$uv.sleep().then(() =>{ this.getIndexItemRect().then(size => { // 由于对象的引用特性,此处会同时生效到父组件的children数组的本实例的top属性中,供父组件判断读取 this.top = Math.ceil(size.top) this.height = Math.ceil(size.height) }) }) }, getIndexItemRect() { return new Promise(resolve => { // #ifndef APP-NVUE this.$uvGetRect('.uv-index-item').then(size => { resolve(size) }) // #endif // #ifdef APP-NVUE const ref = this.$refs['uv-index-item'] dom.getComponentRect(ref, res => { resolve(res.size) }) // #endif }) } }, } </script> <style lang="scss" scoped> @import '@/uni_modules/uv-ui-tools/libs/css/components.scss'; </style>