【问题标题】:Redirect to Previous Page In Angular重定向到 Angular 中的上一页
【发布时间】:2018-06-21 09:42:48
【问题描述】:

我已经安装了一个名为 ngx-pagination 的包。但是我有一个问题,因为当您离开上一页并单击后退按钮时,它会将您重定向到第一页而不是返回上一页?如果我单击浏览器中的后退按钮,如何使其返回上一页?下面是我的代码。

TS

     config: any; 

     constructor() {
        this.config = {
                currentPage: 1,
                itemsPerPage: 2
            };

         this.route.paramMap
            .map(params => params.get('page'))
            .subscribe(page => this.config.currentPage = page);
            }
      }

      ngOnInit() {
            this.getAllBooks();


      }

      pageChange(newPage: number) {
           this.router.navigate(['/books'], { queryParams: { page: newPage } });
  }

        getAllBooks() {
            this.subscription = this.booksService.getAll()
            .subscribe(
                (data:any) => {
                    this.books = data;
                console.log(data);
            },
            error => {
                console.log(error);
            });
        }

HTML

<tbody>
          <tr *ngFor="let book of books | paginate: { itemsPerPage: config.itemsPerPage, currentPage: config.currentPage }">
            <td>{{ book.SKU }}</td>
            <td>{{ book.name }}</td>
            <td>{{ book.description }}</td>
         </tr>
        </tbody>
        </table>
        <pagination-controls (pageChange)=“pageChange($event)” class="my-pagination"></pagination-controls>

【问题讨论】:

    标签: angular parameters pagination angular2-services angular-services


    【解决方案1】:

    我相信您面临的问题是因为您没有使用路由器来存储当前页面。因此,当您单击浏览器上的后退按钮时,它将执行路由器导航而不是分页导航。

    因此,不仅要更新控件上的当前页面,还需要在每次更改页面时将页面存储在路由器中并进行导航。如果您在浏览器按钮上来回导航,这种方式独立,页码始终保持同步。

    使用这种方法的另一个优点是,您将能够在新标签页上打开网址并从正确的页面开始,甚至与其他人共享,它会直接指向您期望的页面,而不是将其重置为第一页。

    您可以在 ngx-pagination 本身的文档中查看实现示例 here

    【讨论】:

    • 我可以帮助您解释提供的示例中您可能不理解的任何内容。但是你必须先尝试构建它:)
    • 我已经编辑了我的代码。我相信我在附近,但仍然无法得到它。请帮我。谢谢
    • 在你的 html 上有一个错误。您的 currentPage 指向 config.itemsPerPage 而不是 config.currentPage
    • 我刚刚编辑了它。但是还是有问题。当我单击第二页时,它会显示很多页面以及无限按钮
    • 好吧,从我在文档中看到的你有另一个错误。因此 pageChange 事件会向您发送页码。而且您正在将配置设置为该配置而不是 config.currentPage。我相信这会破坏您的设置。我认为你应该这样做 (pageChange)=“config.currentPage=$event”
    【解决方案2】:

    您面临的问题是因为导航:

    pageChange(newPage: number) {
        this.router.navigate(['/books'], { queryParams: { page: newPage } });
    }
    

    你不应该调用this.router.navigate,而是直接调用它:

    constructor() {
        let currentPage = localStorage.getItem('currentPage');
        this.config = {
            currentPage: currentPage ? currentPage : 1 ,
            itemsPerPage: 2
        };
    }
    
    pageChange(newPage: number) {
        localStorage.setItem('currentPage', newPage);
        this.config.currentPage = newPage;
    }
    

    【讨论】:

    • 我需要查询参数,因为当我导航到另一个菜单并单击返回按钮时,它会重置到第一页
    • 这也会做同样的事情,试试这个代码并检查你的可能性。
    • 是的,我试过了,但是当我单击另一个菜单时它可以工作,当我返回时它会将我重置到第一页。因为您的 URL 中没有查询参数。
    • 好的,所以你希望它出现在用户离开的某个页面上?
    • 是的,这就是我使用查询参数的原因
    猜你喜欢
    • 2021-02-12
    • 2017-04-30
    • 2021-12-05
    • 1970-01-01
    • 2018-11-13
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多