Angular 6 滾動列表元件的封裝

2021-09-13 12:52:50 字數 2162 閱讀 1561

如果資料量比較小的話,我們完全可以將資料一次性全部拿出來,放到dom中進行迴圈滾動。實際就是類似輪播圖的效果。

但若有很多資料的話,這樣做很可能造成記憶體洩露。自然,我們可以想到將列表資料分頁。我最初的想法是,在table的外層放乙個div作為容器,然後table定時向上增加top值,等table跑了一半時,向後端請求資料,動態建立乙個元件tbody插入到table中,然後等前面乙個tbody走完時(看不見了),將這個元件刪除。該想法看起來可行的,但是實踐中遇到了不少麻煩。在刪除前面的元件時,會導致table的高度減小,**瞬間掉下去了。這顯然不是我們想要的,***挺大的。

既然這樣,我把tbody分開到兩個table裡,兩個table迴圈。當前乙個table下面沒有資料時,第二個table開始走,等第乙個table完全走出div,將它位置重置到div的下面,並更新資料,然後重複之間的動作。完成起來稍微有點麻煩,不過效果還說得過去,差強人意。問題是,兩個定時器不穩定,開啟其他軟體,再回來時,兩個table跑的不一致了。這個先天性疾病,setinterval就是不夠精確的,兩個定時器一起容易出現配合不好的情況。

最終,在下班回家的路上,我想到了乙個不需要兩個table的方法。只用乙個table定時上移,走完一半時,清除定時器,重置位置,並更新一半的資料。也就是去除陣列中前一半資料,將後台拉過來的新資料拼接在陣列上。這樣就可以實現資料的持續重新整理,並且table看起來是一直往上走的。

欄位1

欄位2欄位3

欄位4

//開啟定時器

this.timer = this.go(scroller);

} getfreshdata() ?pagenow=$`).subscribe((data:any) =>

this.freshdata = data;

});}

go(scroller)

scroller.style.transition = "top 0.5s ease";

moved++;

scroller.style.top = top + step + 'px';

} else

};timer = setinterval(task, 1000);

}}

.table-container 

.head-show

.scroller-container

}table

td //border-width:1px 0 ;

}}

這樣實現的效果是,該元件只需要傳入乙個引數url,然後所有的操作、包括更新資料,全部由元件自身完成。從而完成了元件的封裝,便於復用。

1、更新資料應該放在源頭更新,也就是說,不要去新增和刪除dom元素,這樣操作麻煩,效能也低。放在源頭的意思是,在元件類中儲存展示資料的那個陣列上做文章。

2、後台請求新資料應該提早準備就緒,放在另乙個臨時陣列中。它相當於乙個快取,乙個暫存器。

3、我將元件想象成乙個函式,它只有乙個引數,就是資料的位址,只要有這個引數,元件就能正常工作,不依賴於其他任何值。松耦合性。

4、加強函式式程式設計思想,雖然這是react的特色,但我總覺得angular也可以的。

angular6之父子元件通訊

父元件向子元件傳入資料 父元件訪問子元件的方法和資料 方法一 新增方法二 父元件ts 中呼叫子元件的方法和屬性。首先匯入模組viewchild。import from angular core 在父元件的類中將子元件作為viewchild注入到父元件中 viewchild additemcompon...

angular6 表單驗證

按照官網執行 npm install g angular cli再執行ng serve open報錯 1.匯入formsmodule。2.把formsmodule新增到ngmodule裝飾器的imports列表中,這樣應用就能訪問模板驅動表單的所有特性,包括ngmodel。響應式表單 import ...

Angular6 前端搭建

本次開發使用angular6結合ng zorro完成前端的開發。本次組內的前端由我來搭建。本次搭建過程是在前輩的基礎上做的,所以有一些可以復用的功能為本次搭建節省了很多的時間,不過這個學習的過程還是很寶貴的。1 angular開發使用,目前實踐典型專案有itoo pc端 physical pc端。2...