如果資料量比較小的話,我們完全可以將資料一次性全部拿出來,放到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...