美文网首页Vue
vue 封装可复用列表组件

vue 封装可复用列表组件

作者: 一代码农1970 | 来源:发表于2019-03-29 17:04 被阅读0次

在开发过程当中,列表页面会有很多,比如:消息列表、用户列表等。
我们可以为这样的页面封装一个可复用性的列表组件。

这些页面的共性:
1、后端接口非常相似:请求列表数据 需要提交的参数 请求的页数pageIndex 和 每页的个数 pageSize ,返回参数 data 里边基本会有 list数组。
2、分页加载,也就是上拉加载更多,或者点击页面加载更多。

不同之处:
1、每个列表项的UI布局不同。比如:消息列表,每个消息大概内容包括:消息标题,描述,时间等信息。用户列表,每个用户项,大概内容包括:用户的姓名,联系方式等等。
2、每个列表项有自己的业务逻辑,点击事件等等
3、后端接口请求参数,pageIndex和pageSize之外的参数。

封装可复用列表组件涉及到的vue 技术点
1、props 父组件 把 请求api地址和请求参数传递给组件。
2、v-slot 作用域插槽 父组件可以访问子组件 item 数据,解耦UI布局。
3、mint-ui Loadmore 组件 实现上拉加载更多。

我们在封装复用性组件的时候,组件名建议使用多个单词,避免跟现有的以及未来的 HTML 元素相冲突。

v-list 组件

<!-- 列表组件 -->
<template>
    <div class="list">
        <mt-loadmore 
            :bottom-method="loadBottom"
            :bottom-all-loaded="bottomAllLoaded"
            :autoFill="false" 
            ref="loadmore">
            <div v-for="(item,index) in list" :key="index">
                <!-- 这里是关键 slot 插槽 绑定 item 数据,父级可以访问 -->
                <slot v-bind="item"></slot>
            </div>
            <div class="store-no-more" v-if="noMoreShow">
              {{list.length==0?'暂无数据':'没有更多了'}}
            </div>
        </mt-loadmore>
    </div>
</template>
<script>
    import utils from '@/utils' // 公共方法
    export default {
        name:'v-list', 
        data:()=>({
            pageIndex:1, // 请求页
            list:[],//列表数据
            bottomAllLoaded:false,//上拉加载更多
            noMoreShow:false,//没有更多了 提示
        }),
        props:{
            // 请求配置 两个 key 1.url 请求api接口    2.data  请求参数
            requestData:{
                type:Object,
                default:()=>{},
            }
        },
        created(){
            this.getList();
        },
        components:{},
        methods:{
            //获取列表
            getList(){
                // data 请求列表参数 url  api 地址
                let {data,url} = this.requestData;
                // 请求列表数据  request 方法是 axios 请求封装
                utils.request({ 
                    params:{
                        url, // api
                        params:{
                            ...data,  // 混入请求参数
                            pageIndex:this.pageIndex,
                            pageSize:10,
                        }
                    },
                    success:(data)=>{
                        //接口返回list数组 具体的业务逻辑请结合你自己的项目 自己处理。
                        //比如:是不是最后一页,没有数据等等。
                        if( data.list ){
                                // 合并数组
                                this.list = [...this.list,...data.list]; 
                            }
                        // mint ui Loadmore 的一个方法。如果没有用过可以忽略。
                        // 本章学习的要点是 props 和 v-slot
                        this.$refs.loadmore.onBottomLoaded(); 
                    }
                })
            },
            //上啦加载更多
            loadBottom(){
                this.bottomAllLoaded = true;
                this.pageIndex++;
                this.getList();
            },
        }
    }
</script>

使用 v-list

<!-- 父级 -->
<template>
    <div class="view">
                                          <!-- 作用域插槽 -->
        <v-list :request-data="requestData" v-slot="item"> // 
            <div class="item">
                <!--具体的UI布局自行处理,这里我们可以访问数组项数据,
                访问数据可以通过  item.key 访问 ,
                比如:item.name名字  item.phone 手机号-->
            </div>
        </v-list>
    </div>
</template>
<script>
    import vList from '@/components/v-list/v-list'
    export default {
        data:()=>({
            // 我们传入 props 的数据 ,url  是 api 接口 ,
            // data  是我们请求列表数据的参数
            requestData:{ 
                url: 'api',
                data: {
                    // 请求列表参数
                }
            },
        }),
        components:{vList},
    }
</script>

好,到了这里我们就封装并使用了一个可复用列表组件。
总结:
封装这个列表组件,可以解决大部分列表页,列表组件完成了,数据请求,加载更多,是不是最后一页等功能,不必在每个列表页,处理这些问题。
我们通过作用域插槽,父级可以访问每个列表项的数据,可以解耦UI布局,自己定义自己的UI布局,添加事件等。

相关文章

  • vue 封装可复用列表组件

    在开发过程当中,列表页面会有很多,比如:消息列表、用户列表等。我们可以为这样的页面封装一个可复用性的列表组件。 这...

  • 2018-09-18 vue第六章

    组件:组件可以扩展 HTML 元素,封装可重用的代码。组件是可复用的 Vue 实例,所以它们与 new Vue 接...

  • 2018-09-18

    组件是可复用的 Vue 实例一、组件:可以拓展HTML元素,封装可重用的代码组件分为全局组件和局部组件通过prop...

  • Vue组件

    组件(Component)是Vue.js 最强大的功能之一。组件可以扩展出HTMl元素,封装可重用的代码。是可复用...

  • Vue组件

    Vue组件 明明vue已经那么完美了,为什么还要学习Vue呢? 这是为了实现高度封装和高度可复用。 一、注册 使用...

  • 三篇文章学完Vue(二)

    组件 组件是可复用的vue实例,且带有名字。 1.因为组件为可复用的Vue实例,所以它们与new Vue接收相同的...

  • Vue组件

    定义 组件化开发指的是:根据封装的思想,把页面上可复用的UI结构封装为组件,从而方便项目的开发和维护。 vue是一...

  • 复用的列表组件

    在开发过程当中,列表页面会有很多,比如:消息列表、用户列表等。我们可以为这样的页面封装一个可复用性的列表组件。 这...

  • 组件(模块化)

    Component组件是可复用的 Vue实例

  • Vue.js破冰系列-5组件基础(一)

    组件(Component)是可复用的Vue实例,这句话给了我们两个信息,可复用和Vue实例。可复用就是能够重复使用...

网友评论

    本文标题:vue 封装可复用列表组件

    本文链接:https://www.haomeiwen.com/subject/xunlbqtx.html