分页,循环内部变量

时间:2018-11-18 22:11:56

标签: javascript loops pagination fetch

我用api提取函数没什么问题。我在函数Popular()外部有变量currentPage,在这种情况下一切正常,但是当我试图在函数Popular()中声明该变量以获取增量时,我的数字仍然是1。有什么方法可以在不声明全局的情况下获取增量变量,但使用本地?按下按钮(nextPage())后,currentPage ++的数量应每次增加。

let currentPage = 1;   <--- //global variable(I dont want)

popular();
function popular(page) {

        fetch("https://api.themoviedb.org/3/movie/popular?api_key=xxxxxxxxxxxxxxxxxxx&page="+ page+"")
        .then(resp => resp.json())
        .then(resp => {

            movieApi = resp;
            movieResult = resp.results;
            maxLenght = resp.total_pages;
            document.getElementById("movie-section").innerHTML = `${movieResult.map(movieCard).join("")}`;
            document.getElementById("btns-container").innerHTML = paginationCont();
            shortText();
            function paginationPage(){

                console.log("maxLenght " +maxLenght);

                const btnNext = document.getElementById("nextBtn");
                const btnPrev = document.getElementById("prevBtn");
                function prevPage() {

                    if (currentPage > 1) {
                        currentPage--;
                        popular(currentPage);
                    }
                }
                function nextPage() {
                    if (currentPage < maxLenght) {
                        currentPage++;  <-- //it does not work when it declares inside
                        popular(currentPage);

                    }
                }


                btnNext.addEventListener("click", nextPage);
                btnPrev.addEventListener("click", prevPage);

            }
            paginationPage();
        });
    }

2 个答案:

答案 0 :(得分:1)

实际上,您可以不使用currentPage的值,因为您已经拥有{em> 是本地的page参数:

popular(1);
function popular(page) {
    // ...etc ...
    // ...
    function prevPage() {
        if (page > 1) popular(page-1);
    }
    function nextPage() {
        if (page < maxLenght) popular(page+1);
    }
    // ...
}

注意:您可能想查看maxLenght变量的拼写;-)

答案 1 :(得分:0)

问题在于,您需要访问持久性变量,以便跟踪popular调用之间的当前页面。如果您不希望使用 global 变量,但是可以使用 outer 变量,则可以选择创建currentPage变量,其范围仅限于{ {1}},并且在其他地方无法看到或更改:使用声明popular并返回当前currentPage函数的IIFE:

popular

尽管const popular = (() => { let currentPage = 1; return (page) => { fetch( ... // ... // put the rest of the big function here }; })(); // make sure to call `popular` for the first time *after* the IIFE: // function declarations are hoisted, but IIFEs are not popular(); currentPage函数中不是 local ,但它可以实现您所要的东西,而不会造成任何不必要的全球污染。