• 3. 聊天列表页面的实现


    实现完导航栏后,接着把聊天列表页面做完,完成效果如下:

    分析页面,可以将每一个对话封装成一个组件。头像在其余的页面也需要用到,也可以将它封装成一个公共组件;

    1. 头像组件   h-avatar.vue

    <template>
    	<image :src="src" :style="getSize" mode="widthFix" class="rounded-circle"></image>
    </template>
    
    <script>
    	export default {
    		props: {
    			size: {
    				type: [String, Number],
    				default: 90
    			},
    			src: {
    				type: String,
    			}
    		},
    		computed: {
    			getSize() {
    				return `height: ${this.size}rpx; ${this.size}rpx;`
    			}
    		}
    	}
    </script>
    

      

    2. 聊天列表组件  h-media-list.vue

    <template>
        <view class="flex align-center justify-between">
            <!-- 头像 -->
            <view style="height: 140rpx;  140rpx;" class="flex justify-center align-center">
                <h-avatar :src="item.src"></h-avatar>
            </view>
            
            <!-- 聊天列表 -->
            <view class="flex flex-column flex-1 ml-3 border-bottom justify-center" style="height: 140rpx;">
                <view class="flex justify-between align-center">
                    <text class="font-lg" style="font-size: 36rpx;font-weight: 300;">{{item.nickName}}</text>
                    <!-- 运用过滤器格式化时间 -->
                    <text class="m-1 text-gray" style="font-size: 26rpx;">{{item.time | formatTime}}</text>
                </view>
                <text style="font-size: 26rpx;" class="mt-1 text-gray">{{item.content}}</text>
            </view>
        </view>
    </template>
    
    <script>
        import hAvatar from '@/components/free-ui/h-avatar.vue'
        import $Time from '@/common/free-lib/time.js'
    
        export default {
            props: {
                item: {
                    type: Object,
                }
            },
            components: {
                hAvatar
            },
            data() {
                return {
                    
                }
            },
            filters: {
                formatTime(value) {
                    return $Time.gettime(value)
                }
            },     
        }
    </script>

    对于右侧的人性化时间, 我们引入一个时间格式化的库,时间方式用时间戳,然后通过一个过滤器实现时间的显示。

    3. 在index.vue中引用

    <view class="flex flex-column">
        <block v-for="(item, index) in chatList" :key="index">
            <h-media-list :item="item"></h-media-list>
        </block>
    </view>
  • 相关阅读:
    [转]VirtualBox错误 Unable to load R3 module 解决方案
    2014工作感想
    人生的真正价值
    react生成二维码
    判断对象中是否包含某个属性
    使用reduce进行数组对象去重
    filter筛选
    判断区分安卓ios
    scrollIntoView 与 scrollIntoViewIfNeeded API 介绍
    vue中使用@scroll实现分页处理(分页要做节流处理)
  • 原文地址:https://www.cnblogs.com/zhanghaoblog/p/12210011.html
Copyright © 2020-2023  润新知