【问题标题】:Angular 8 Pagination custom without using materialAngular 8分页自定义不使用材料
【发布时间】:2020-12-21 07:42:45
【问题描述】:

我想在不使用材质库的情况下在 Angular 8 项目中进行分页。我收到一个包含 10 个数据行、首页链接、最后一页链接和总页数的数组。

来自服务器的响应:

{
    data : [
        {name: 'abc': id: 1},
        {name: 'abc': id: 2},
        {name: 'abc': id: 3},
        {name: 'abc': id: 4}
    ],
    first_page_url: "http://example.com/api/data?page=1"
    from: 1,
    last_page: 5,
    last_page_url: "http://example.com/api/data?page=5",
    next_page_url: "http://example.com/api/data?page=2",
    path: "http://example.com/api/data",
    per_page: 30,
    prev_page_url: null,
    to: 30,
    total: 123,
}

我怎样才能使分页工作?

【问题讨论】:

  • 问题需要最小的可重复示例..请read
  • @AbdullahAlNoor 我添加了一些信息
  • 你有当前页码吗?
  • 我更新了我的答案...现在检查..你如何从next_page_url 获得current_page 号码...
  • @AbdullahAlNoor 我想点击“发布”API,但 href 会在“获取”上自动执行。我有一个 Angular 项目,但由于 api 而无法正常工作

标签: javascript angular pagination


【解决方案1】:

其实我是用 vanilla js 为我的 laravel (bootstrap) 应用程序做的。

@yasirali 你几乎拥有一切......只有 current_page 变量丢失......

我想它会帮助你...

注意: 您可以通过减去next_page_url :http://example.com/api/data?page=5的形式轻松获得当前页码(current_page

var last_page_url = "http://example.com/api/data?page=5";
   var last_page = last_page_url.split("=");
   
  var  next_page_url = 'http://example.com/api/data?page=1';
  var current_page = next_page_url.split("=");
  
  if(current_page[1] != 1 || current_page[1] != last_page[1]){
    current_page = current_page[1] - 1; 
  }else if (current_page[1] == last_page[1]){
    current_page = last_page[1]; 
  }else if (current_page[1] == 1){
    current_page = 1; 
  }

如果你在最后一页或第一页 next_page_url last_page_url 你不需要减去

注意:如果你在最后一页或第一页..然后检查你现在得到了什么next_page_url last_page_url url..如果你得到null然后应用你的条件为根据您的需要...(在 laravel 应用程序中我得到空值)...

 function paginate (data){
            let pagination = '';
            let cDisabled = data.prev_page_url == null ? 'disabled' : '';
            let lDisabled = data.next_page_url == null ? 'disabled' : '';

            let start = ( data.current_page -2 )  > 0 ?  (data.current_page -2)  : 1 ;
            let last = Math.ceil(data.total /data.per_page) ;
            let end = ((data.current_page +2)  < last)  ?  (data.current_page +2 ) : last ;
            pagination += `
                       <li class="page-item ${cDisabled}"><a class="page-link" href="${data.first_page_url}">First</a></li>
                       <li class="page-item ${cDisabled}"><a class="page-link" href="${data.prev_page_url}">Previous</a></li>
               `;
          
            if(   start > 1   ){
                pagination +=    `
                <li class="page-item ${cDisabled}"><a class="page-link" href="${data.first_page_url}">1</a></li>
                <li class="page-item "><a class="page-link" href="#" >...</a></li>
                    
                    `;
                }  

                for(let i= start ; i <= end ; i++){
                    var active = data.current_page == i ? 'active' : false;
              
                    pagination += ` 
                        <li class="page-item ${active}"><a class="page-link" href="${data.path}?page=${i}">${i}</a></li>
                        `;
                }
             

            if(end < last){
                pagination +=    `
                <li class="page-item ${lDisabled}"><a class="page-link" href="#">...</a></li>
                <li class="page-item ${lDisabled}"><a class="page-link" href="${data.last_page_url}">${last }</a></li>
                    
                    `;
                }     

            pagination  += `      
                            <li class="page-item ${lDisabled}"><a class="page-link" href="${data.next_page_url}">Next</a></li>
                            <li class="page-item ${lDisabled}"><a class="page-link" href="${data.last_page_url}">Last</a></li> 
                            `;                      
            document.getElementById("pagination").innerHTML = pagination;   
        }

【讨论】:

    【解决方案2】:

    你拥有一切。如果你有一个变量“page”和一个变量“total”,以及“last_page”你可以写

    <button (click)="getData(-1)">prev</button>
    {{page}}/ {{last_page}}
    <button (click)="getData(1)">next</button>
    </ng-container>
    
    getData(incr)
    {
        this.page+=incr
        this.service.getElements(page).subscribe(res=>{
                this.data=res.data;
                this.total=total;
                this.last_page=res.last_page
        })
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-26
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多