| <template> | |
| 		<view  | |
| 			class="uv-vtabs-item" | |
| 			:id="`content_${index}`" | |
| 			ref="uv-vtabs-item" | |
| 		> | |
| 			<slot /> | |
| 		</view> | |
| </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 | |
| 	const dom = uni.requireNativePlugin('dom'); | |
| 	// #endif | |
| 	export default { | |
| 		name: 'uv-vtabs-item', | |
| 		mixins: [mpMixin, mixin], | |
| 		props: { | |
| 			index: { | |
| 				type: [Number,String], | |
| 				default: 0 | |
| 			} | |
| 		}, | |
| 		data(){ | |
| 			return { | |
| 				// 记录item的离顶部的距离 | |
| 				top: 0, | |
| 				// 记录item的高度 | |
| 				height: 0 | |
| 				// 是否为联动 | |
| 			} | |
| 		}, | |
| 		mounted() { | |
| 			this.init(); | |
| 		}, | |
| 		methods: { | |
| 			async init(){ | |
| 				this.getParentData('uv-vtabs'); | |
| 				if (!this.parent) { | |
| 					return this.$uv.error('uv-vtabs必须要搭配uv-vtabs-item组件使用') | |
| 				} | |
| 				if(!this.parent.chain) return; | |
| 				await this.$uv.sleep(); | |
| 				this.getItemRect().then(size=>{ | |
| 					// 由于对象的引用特性,此处会同时生效到父组件的children数组的本实例的top属性中,供父组件判断读取 | |
| 					this.top = size.top; | |
| 					this.height = size.height; | |
| 				}); | |
| 			}, | |
| 			getItemRect(){ | |
| 				return new Promise(resolve => { | |
| 					// #ifndef APP-NVUE | |
| 					this.$uvGetRect('.uv-vtabs-item').then(size => { | |
| 						resolve(size) | |
| 					}) | |
| 					// #endif | |
| 					// #ifdef APP-NVUE | |
| 					const ref = this.$refs['uv-vtabs-item'] | |
| 					dom.getComponentRect(ref, res => { | |
| 						resolve(res.size) | |
| 					}) | |
| 					// #endif | |
| 				}) | |
| 			} | |
| 		} | |
| 	} | |
| </script>
 |