我想将缓存密钥保存在一个中心位置。我想将其作为一个常量文件。此时我已经在每个页面都声明了缓存键,但我需要它。但我需要删除那个重复。我该怎么做?
缓存密钥声明之一:
purchasedOfflineArticlesKey: string = 'myLibraryPurchasedOfflineArticles';
你能告诉我一个合适的设计吗?我是否需要为此创建一个类,并在其他需要的地方或其他任何方式使用该类?希望你能为此提供反馈。
更新:
我有如下的缓存服务。
本地高速缓存service.ts
import { Injectable } from '@angular/core';
import { CacheService } from "ionic-cache";
@Injectable()
export class LocalCacheServiceProvider {
constructor(private cache: CacheService) { }
//get Item
getItem(key: string): Promise<any> {
return this.cache.getItem(key);
}
}
我用过这样的话:
离线articles.ts
private purchasedOfflineArticlesKey: string = 'myLibraryPurchasedOfflineArticles';
constructor(private localCacheService: LocalCacheServiceProvider) {
}
ionViewDidLoad() {
this.localCacheService.getItem(this.purchasedOfflineArticlesKey).then(values => {
this.arrangeMyOfflineArticles(values);
}).catch(reason => {
});
}
答案 0 :(得分:2)
在我的一个项目中,我已经在名为constants.ts
的文件中为此目的定义了名称空间。你也可以做到的。以下是一些示例代码:
export namespace AppConstants
{
// Class for general global variables.
export class General
{
public static readonly WELCOME_TITLE = 'Welcome to my App';
};
}
在我想要使用常量的应用程序中,我正在导入此命名空间:
import { AppConstants } from './core/common/constants';
我可以访问这些常量,如:
myMethod(){
console.log(AppConstants.General.WELCOME_TITLE);
}
答案 1 :(得分:2)
不应将类用于无法从类实例化中受益的东西。
一种选择是将它们作为导出放在单独的文件中,这样就可以在导入时解析不存在的键:
export const foo = 'foo';
export const bar = 'bar';
或者,可以将缓存键声明为对象键,例如,在声明缓存服务的地方。
export const CACHE_KEYS = {
foo: 'foo',
bar: 'bar'
};
@Injectable()
export class LocalCacheServiceProvider {
constructor(private cache: CacheService) { }
getItem(key: keyof typeof CACHE_KEYS): Promise<any> {
return this.cache.getItem(key);
}
}
该服务可以使用keyof
约束来限制已知密钥的密钥。
根据应用程序的设计,每个模块/组件可以扩展LocalCacheServiceProvider
和密钥集,以便为设备提供唯一的密钥集。