2016-02-22 5 views
5

Başlamak için çalışıyorum: Temelde bir dizi hizmetten (örneğin, günlük girişlerinin bir listesini içeren bir "günlük" hizmetinden veri kaydedebilmek istediğim bir uygulama var; temaların ve/veya stil ayarlarının bir listesini içeren bir "temalar" hizmeti; vb.). Sadelik için, bu verileri kaydetmek için localStorage kullanıyorum. Bu nedenle, üyelerin beklediği gibi anahtar/değer çiftlerini kaydetme ve yükleme için tanımlayan genel bir "LocalStorage" hizmetim var.Tüm uygulamada birden çok hizmetin açısal 2'deki verileri nasıl kaydederim?

Sorum şu: Bir üst düzey tasarım açısından bakıldığında , nasıl tasarruf ve (a ayarları sayfasında yani "Kaydet/Yükle" düğmesini) tek bir kontrol noktasından benim uygulama verilerini yükleme yaklaşımı olmalıdır. İdeal olarak, uygulama servislerimi, her biri, bu hizmette uygulanacak bir "Veri Kaydet" ve "Veri Yükle" yöntemini gerektiren ortak bir "yerel depolama" arabirimini uygulayacak şekilde uygulayabilmek isterim. Mücadele ettiğim bölüm, bu "yerel depolama" arayüzünü uygulayabilecek ve "kaydetme/yükleme" yöntemlerinin tümünü bir kerede çağırabilecek tüm servisler arasında nasıl yineleyebileceğidir. Bu konuda, bunun doğru bir yaklaşım olup olmadığından emin değilim.

Angular 2'ye hala çok yeni yaşıyorum, bu yüzden herhangi biri bu tür bir probleme ışık tutabilirse ve mantıklı bir çözüm önerebilirse, bu çok takdir edilecektir. Teşekkürler!

cevap

4

Hatta LocalStorageService olabilir global servis (kullanırsınız ama daha UI özgü bir daha uygun olacağını tahmin Ben bir örnek olarak GlobalUserActions kullanın:.

@Injectable() 
export class GlobalUserActions { 
    // Subject would be better but I don't know TS/RxJS well enough 
    // EventEmitter should only be used for @Output() 
    saveAll:EventEmitter = new EventEmitter(); 

    doSaveAll() { 
    saveAll.emit(null); // or any information that might be useful to components 
    } 
} 
@Component({ 
    selector: 'any-com', 
    ... 
}) 
export class AnyComponent { 
    constructor(
     private globalUserActions: GlobalUserActions, 
     private persistenceService: PersistenceService) { 
    this.globalUserActions.saveAll.subscribe(save); 
    } 

    save(value) { 
    this.persistenceService.save(...); 
    } 
} 
bootstrap(AppComponent, [ ... , 
    LocalStorageService, 
    // use a generic `PersistenceService` but provide a concrete 
    // `LocalStorageService` 
    provide(PersistenceService, {useExisting: LocalStorageService}) 
]); 
+0

Örnek için teşekkürler: Bu, elde etmeye çalıştığım şeylerin çizgileri boyunca görünüyor. Bileşen yapıcısında Kalıcılık Hizmetinin ne için kullanıldığını kısaca anlatabilir misiniz? Bunu bir şekilde veriyi kaydetmek için kullanmak istediğiniz hizmeti özetlediğimi varsayardım (yani, önyükleme işleminde, yerel yerine bir DB'den kaydetme/yükleme yaparken 'useExisting'ı' MyDBService 'olarak ayarlamayı tercih edebilirim) depolama) – Novark

+0

Yup, "Kalıcılık Hizmeti" nin nasıl kullanılacağını/kullanılacağını düşünüyorum. –

+0

OP, servisler arasında yineleme yapmak istediğinden, abone olmayın() 've' save() 'yöntemi çağrılar değil, hizmetlerde olmalıdır? ya da bir şey mi eksik? –

İlgili konular