18 個人中心頁面開發(定制uni-list-item,淺談vue的provide和inject)
縱覽效果圖:
一 定制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 找到注釋掉
二 完整代碼:
<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可以輕松實現跨級訪問父組件的數據
二、代碼解析
或者 另外一種理解:
provider/inject:簡單的來說就是在父組件中通過provider來提供變量,然后在子組件中通過inject來注入變量
需要注意的是這里不論子組件有多深,只要調用了inject那么就可以注入provider中的數據。而不是局限於只能從當前父組件的prop屬性來獲取數據。
從上面這個例子
可以看出,只要在父組件中調用了,那么在這個父組件生效的生命周期內,所有的子組件都可以調用inject來注入父組件中的值。