18 uniapp-個人中心頁面開發(定制uni-list-item,淺談vue的provide和inject)


18 個人中心頁面開發(定制uni-list-item,淺談vue的provide和inject)

縱覽效果圖:

image-20200409204323980

一 定制uniapp的列表組件,

1 定制有名插槽方便自己使用自己的圖標。

2 去掉列表自帶的上邊線。

。。。
<view v-else-if="showExtraIcon" class="uni-list-item__icon">
					<slot name="myicon">
						<uni-icons :color="extraIcon.color" :size="extraIcon.size" :type="extraIcon.type" class="uni-icon-wrapper" />
					</slot>
				</view>
。。。
/* #ifndef APP-NVUE */
	.uni-list-item__container:after {
		position: absolute;
		top: 0;
		right: 0;
		left: 0;
		height: 1px;
		content: '';
		-webkit-transform: scaleY(.5);
		transform: scaleY(.5);
		/* background-color: ; */ # 主石掉background-color
	}

3 找到注釋掉

image-20200409215211445

二 完整代碼:

<template>
	<view >
		
		<view class="flex px-2 py-3 align-center">
			<image src="/static/default.jpg" class="rounded-circle mr-2" style="height: 100rpx;width: 100rpx;" mode=""></image>
			<view class="flex-1 flex flex-column ">
				<text class="font-lg font-weight-bold">123123123123</text>
				<view class="font text-muted">
					<text class="mr-3 ">總帖子 1</text>
					<text>今日發帖 0</text>
				</view>
			</view>
			<text class="iconfont icon-jinru font-lg"></text>
		</view> 
		
		<view class="flex align-center px-2">
			<view class="flex-1 flex flex-column align-center justify-center"
			v-for="(item,index) in myData" :key="index">
				<text class="font-lg font-weight-bold">{{item.num}}</text>
				<text class="font text-muted">{{item.name}}</text>
			</view>
		</view>
		
		<!-- 廣告欄 -->
		<view class="px-2 py-3">
			<image src="/static/demo/banner2.jpg" 
			class="w-100 rounded"
			style="height: 170rpx;" mode="aspectFill"></image>
		</view>
		
		<!-- 三個小列表 -->
		<uni-list-item :show-extra-icon="true"  title="瀏覽歷史">
			<text slot="myicon" class="iconfont icon-liulan"></text>
		</uni-list-item>
		<uni-list-item :show-extra-icon="true"  title="社區認證">
			<text slot="myicon" class="iconfont icon-huiyuanvip"></text>
		</uni-list-item>
		<uni-list-item :show-extra-icon="true"  title="審核帖子">
			<text slot="myicon" class="iconfont icon-keyboard"></text>
		</uni-list-item>
		
	</view>
</template>

<script>
	import uniListItem from '@/components/uni-ui/uni-list-item/uni-list-item.vue'
	export default {
		components:{
			uniListItem
		},
		data() {
			return {
				myData:[{
					name:"帖子",
					num:1
				},{
					name:"動態",
					num:1
				},{
					name:"評論",
					num:2
				},{
					name:"粉絲",
					num:0
				}]
				
			}
		},
		// 監聽導航條按鈕
		onNavigationBarButtonTap(){
			uni.navigateTo({
				url:'../user-set/user-set'
			})
		},
		methods: {
			
		}
	}
</script>

<style>

</style>

三 淺談VUE的provide和inject

一、概念解析

成對出現:provide和inject是成對出現的

作用:用於父組件向子孫組件傳遞數據

使用方法:provide在父組件中返回要傳給下級的數據,inject在需要使用這個數據的子輩組件或者孫輩等下級組件中注入數據。

使用場景:由於vue有$parent屬性可以讓子組件訪問父組件。但孫組件想要訪問祖先組件就比較困難。通過provide/inject可以輕松實現跨級訪問父組件的數據

二、代碼解析

image-20200409215350760

image-20200409215415758

或者 另外一種理解:

provider/inject:簡單的來說就是在父組件中通過provider來提供變量,然后在子組件中通過inject來注入變量

需要注意的是這里不論子組件有多深,只要調用了inject那么就可以注入provider中的數據。而不是局限於只能從當前父組件的prop屬性來獲取數據。

image-20200409215538897

image-20200409215630556

從上面這個例子

可以看出,只要在父組件中調用了,那么在這個父組件生效的生命周期內,所有的子組件都可以調用inject來注入父組件中的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM