angular - 编写通用逻辑以从 API 获取表格排序和分页首选项并相应地显示数据 angular 4
问题描述
我正在尝试在材料设计表上编写自定义逻辑。我想在哪里保存matSortActive、matSortDirection之类的首选项,当用户下次访问同一个组件时,他可以根据他保存的首选项查看表格。为此,我将首选项保存在本地存储中,然后检索它并显示数据。
我想编写一个自定义指令,它可以读取本地存储并直接应用这些设置。无需在组件或任何服务中编写相同的代码以实现可重用性。
我的指令是
import { Directive, ElementRef, Input, HostListener, OnInit } from '@angular/core';
import { LocalStorageService } from '../services/local-storage.service';
@Directive({
selector: '[savePrefrences]'
})
export class SavePrefrencesDirective implements OnInit{
@Input() set savePrefrences(prefrencesEvent) {
prefrencesEvent.subscribe((prefr) => {
if(!prefr || !prefr.component ||
!prefr.event){
return;
}
let savePref = {
event: prefr.event,
pageSize: prefr.pageSize,
filter: prefr.filters
}
let pref = {};
let currentPref = this.getPreferencesObject();
if(currentPref){ //[prefr.component]
let prefParse = currentPref;
if(prefParse[prefr.component]){
prefParse[prefr.component] = savePref;
pref = prefParse;
}
} else {
pref[prefr.component] = savePref;
}
this.setPreferencesObject(pref);
});
}
getPreferencesObject() {
let currentPref = this.localStorageService.getKey('preferences');
if(currentPref){
return JSON.parse(currentPref);
}
return null;
}
setPreferencesObject(prefObject: any){
console.log('setting prefrences object' + prefObject);
this.localStorageService.setKey('preferences', JSON.stringify(prefObject));
}
}
对应的html代码是
<mat-table #table [dataSource]="dataSource" matSort [savePrefrences]='sortEvent' matSortDirection='{{sortPref.direction}}' matSortActive='{{sortPref.name}}' (matSortChange)="sortChange($event)"></mat-table>
这里的 savePrefences 指令将 sortEvent 作为事件发射器,它将所有首选项保存为一个对象。如代码所示。
目前我正在提供来自组件的matSortDirection和matSortActive值。
解决方案
推荐阅读
- excel - MacOS excel的这段代码相当于什么?
- laravel - 带有条件的laravel分页
- excel - 如何从 excel 表或其他文件创建黄瓜特征文件
- python - 有限制的长度为 L 的子序列的最大和
- python - 如何获取列名
- python - 致命的 Python 错误:运行我自己的语音助手程序时出现分段错误
- android - 在 AAR 文件创建 Android 时正在修改代码
- iphone - OS 12.1.4 (16D57),此版本的 Xcode 可能不支持
- azure - 我在哪里可以找到 azure web app linux 的 ftp 凭据?
- javascript - 在悬停时隐藏图像标题并显示覆盖文本