zoukankan      html  css  js  c++  java
  • netcoreMVC中使用Vue模板分页封装(不适合数据量大)

    自己做了一个分页,方便应用于网站,因为分页在页面中不可缺少,常常使用,所以封装成一个模块,一处引用,每个页面都可以使用。

    这种分页不是每次都从数据库中拿,而是在一开始就把所有数据都拿到了页面中,如果数据量大的化,不适合使用。

    1、在视图下的Shared文件夹中创建文件: _pageHelper.cshtml

    <template id="pageTemplate">
        <nav aria-label="Page navigation">
            <ul class="pagination">
                <li v-bind:class="{'disabled':isDisabledPrevious}">
                    <a href="#" aria-label="Previous" v-on:click="previous">
                        <span aria-hidden="true">&laquo;</span>
                    </a>
                </li>
                <li v-for="i in totalpage" v-on:click="pageClick" v-bind:class="{'active':i==curPage}"><a href="#">{{i}}</a></li>
                <li v-bind:class="{'disabled':isDisabledShowNext}">
                    <a href="#" aria-label="Next" v-on:click="next">
                        <span aria-hidden="true">&raquo;</span>
                    </a>
                </li>
            </ul>
        </nav>
    </template>
    <script>
        Vue.component("wzhpage", {
            template: '#pageTemplate',
            props: {
                pagecount: Number,
                pagesize: {
                    default: 15,
                    type: Number
                },
            },
            data() {
                return {
                    curPage: 1,
                }
            },
            computed: {
                isDisabledPrevious() {
                    return this.curPage == 1;
                },
                isDisabledShowNext() {
                    return this.curPage == this.totalpage;
                },
                totalpage() {
                    return Math.ceil(this.pagecount/ this.pagesize) || 1;
                }
            },
            methods: {
                next() {
                    if (!this.isDisabledShowNext) {
                        this.curPage++;
                        var para = { 'curPage': this.curPage, 'pageSize': this.pagesize };
                        this.$emit("sendcurpage", para);
                    }
                },
                previous() {
                    if (!this.isDisabledPrevious) {
                        this.curPage--;
                        var para = { 'curPage': this.curPage, 'pageSize': this.pagesize };
                        this.$emit("sendcurpage", para);
                    }
                },
                pageClick(event) {
                    this.curPage = event.target.innerHTML;
                    var para = { 'curPage': this.curPage, 'pageSize': this.pagesize };
                    this.$emit("sendcurpage", para);
                },
            }
        });
    
    </script>

    2、在各个模板页引用此页

     @{Html.RenderPartial("_pageHelper");}

    3、在使用页中,使用自创的分页标签

     <wzhpage v-on:sendcurpage="goPage" v-bind:pagecount="datalist.length" v-bind:pagesize="pageSize"></wzhpage>

    sendcurpage这是分页组件中定义的事件,指点击页面后把当前页和每页大小传递给父组件事件goPage。pagecount属性指总记录的个数(也有可能是查询后总记录的个数),pagesize指每页显示数据的个数,都是由父组件传递的值。


    以上只要都不需要修改什么,直接拷贝到页面中即可。以下红色内容根据自己页面的情况分别拷贝进去,按需修改。

    4、在使用页父组件中

      

    (1)查询条件

    名称<input placeholder="请输入查询名称" v-model.trim="searchKey"/><button v-on:click="searchKey=''">清空</button>

     

    (2)js

     var app = new Vue({
            el: '#app',
            data: {
                
                materiallist: [],//从数据库在获取的数据,用自己定义的

    curPage: 1, // 当前页 pageSize: 10,//每页显示数量 searchKey:'',//查询条件 }, mounted: function () { this.$nextTick(function () { this.loadData(); }) }, computed: { //通过计算属性获取要显示的数据 showPageData() { var templist = this.datalist.slice(this.pageSize * (this.curPage - 1), this.pageSize * this.curPage); return templist; }, //分页的所有数据,包括查询时自动模糊查找 datalist() { this.curPage = 1;//查询时初始化当前页 if (this.searchKey != "") { var reg = new RegExp(this.searchKey); return this.materiallist.filter(x => reg.test(x.name)); } else { return this.materiallist; } }, },      methods: { loadData: function () { var me = this; axios.post("/home/getMeterial").then(function (res) { me.materiallist = res.data; }); }, goPage(obj) {//从子组件更新当前页和页的大小 this.curPage = obj.curPage; this.pageSize = obj.pageSize; }, } })

     注意:

    计算属性中两个属性,其中datalist中要添加自己从数据库中获取的数据,这一属性解决查询时得到数据集合,另一个showPageData是给要展示给用户的数据,把它加入到显示数据处,如下:

                 <tr v-for="item in showPageData">
                            <td>{{item.id}}</td>
                            <td>{{item.name}}</td>
                             
                  </tr>                
  • 相关阅读:
    day03 bs4解析库
    day02—selenium库
    day01爬虫三部曲
    IIC SPI UART通信方式的区别
    五大类程序设计模式
    套接字编程基础
    主机字节序和网络字节序转换
    位运算
    ARM体系结构的特点
    static关键字的作用
  • 原文地址:https://www.cnblogs.com/lunawzh/p/14931189.html
Copyright © 2011-2022 走看看