| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- // 拿走即用
- export class BasicDataSource<T> implements IDataSource {
- private listeners: DataChangeListener[] = [];
- private dataArray: T[] = [];
- // =============================================================
- // =================== 框架侧调用 ==============================
- // =============== 接口内部需实现的方法 ==========================
- // =============================================================
- // 该方法为框架侧调用,为LazyForEach组件向其数据源处添加listener监听
- registerDataChangeListener(listener: DataChangeListener): void {
- if (this.listeners.indexOf(listener) < 0) {
- console.info('add listener');
- this.listeners.push(listener);
- }
- }
- // 该方法为框架侧调用,为对应的LazyForEach组件在数据源处去除listener监听
- unregisterDataChangeListener(listener: DataChangeListener): void {
- const pos = this.listeners.indexOf(listener);
- if (pos >= 0) {
- console.info('remove listener');
- this.listeners.splice(pos, 1);
- }
- }
- // =============================================================
- // =================== 程序调用 ===============================
- // =========== 整合 DataChangeListener 内部的方法 ================
- // =============================================================
- // 通知LazyForEach组件需要重载所有子组件
- notifyDataReload(): void {
- this.listeners.forEach(listener => {
- listener.onDataReloaded();
- })
- }
- // 通知LazyForEach组件需要在index对应索引处添加子组件
- notifyDataAdd(index: number): void {
- this.listeners.forEach(listener => {
- listener.onDataAdd(index);
- })
- }
- // 通知LazyForEach组件在index对应索引处数据有变化,需要重建该子组件
- notifyDataChange(index: number): void {
- this.listeners.forEach(listener => {
- listener.onDataChange(index);
- })
- }
- // 通知LazyForEach组件需要在index对应索引处删除该子组件
- notifyDataDelete(index: number): void {
- this.listeners.forEach(listener => {
- listener.onDataDelete(index);
- })
- }
- // 通知LazyForEach组件将from索引和to索引处的子组件进行交换
- notifyDataMove(from: number, to: number): void {
- this.listeners.forEach(listener => {
- listener.onDataMove(from, to);
- })
- }
- // =============================================================
- // ====================== 修改数据源 ===========================
- // ======================== 外部调用 =============================
- // =============================================================
- public totalCount(): number {
- return this.dataArray.length;
- }
- public getData(index: number): T {
- return this.dataArray[index];
- }
- // 在指定的索引处添加一个元素
- public addData(index: number, data: T): void {
- this.dataArray.splice(index, 0, data);
- this.notifyDataAdd(index);
- }
- // 往监听列表内部添加元素
- public pushData(data: T): void {
- this.dataArray.push(data);
- this.notifyDataAdd(this.dataArray.length - 1);
- }
- // 往监听列表内部添加元素
- public unshiftData(data: T): void {
- this.dataArray.unshift(data);
- this.notifyDataAdd(0);
- }
- // 所有数据进行重新赋值
- public init(data: T[]) {
- this.dataArray = data
- this.notifyDataReload()
- }
- // 传入一个数组, 初始化监听列表 - 在数组尾部追加数据
- public reloadDataPush(datas: T[]) {
- datas.forEach(i => {
- this.pushData(i)
- })
- }
- // 传入一个数组, 初始化监听列表
- public reloadDataUnshift(datas: T[]) {
- datas.forEach(i => {
- this.unshiftData(i)
- })
- }
- }
|