2017-08-03 20 views
3

我想將緩存鍵保存在一箇中心位置。我想將其作爲一個常量文件來執行。此時,我已經爲每個所需的頁面聲明瞭緩存鍵。但是我需要刪除那個重複。我該怎麼做?僅有常量的Typescript類

一個緩存鍵聲明:

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 => { 
     }); 
     } 
+1

請看看[這個SO答案](https://stackoverflow.com/questions/39576991/ionic2-angular2-read-a-custom-config-file/39577841#39577841),那裏你可以找到推薦使用角度來處理靜態配置文件。一些事情已經發生了變化(我們現在不使用組件中的提供者數組,但是應該在NgModule中完成相同的工作)。 – sebaferreras

+1

對於不能從類實例化中受益的事物,您不需要類。緩存鍵可能應該在聲明緩存服務的地方聲明。如果你沒有集中式緩存服務,也許這是真正的問題。 – estus

+0

是的,我確實有。感謝很多info.Hope你可以把它作爲一個答案@estus – Sampath

回答

1

類不應該用於無法從類實例化中受益的事物。

一種選擇是讓他們作爲獨立的文件導出,這樣不存在的按鍵可以對進口來解決:

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和密鑰集可以擴展每個模塊/組件,爲單元提供唯一的一組密鑰。

+0

如果我將在這樣的服務上聲明'公共常量''readonly purchasedOfflineArticlesKey:string ='myLibraryPurchasedOfflineArticles';'? – Sampath

+0

'keyof'約束將會被搞亂,它也包含類方法。您將無法從外部訪問常量,那麼應該是「static readonly purchasedOfflineArticlesKey」。把它放在單獨的物體上看起來更清潔。 – estus

+0

爲什麼我需要一個'靜態'關鍵詞?希望我只能使用'readonly'來聲明'常量'否?我的想法是不要使用'CACHE_KEYS'對象。您的想法? – Sampath

1

在我的項目之一,我在一個名爲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); 
} 
+2

downvoters:請你解釋downvotes的原因嗎?因爲這似乎是一種有效的方法,它是一種不同的方法,被標記爲重複的方法... – sebaferreras

+1

這不是我的失望,但我沒有看到爲什麼General可以成爲一個班級的單一原因。 – estus

+0

@estus我剛剛創建了類來組織常量。如果一個人不想要,那實際上並不需要。 – Faisal