[英]Angular 2, How to Share Array Data Between components using service?
在Angular2中,使用服務在組件之間共享數組數據?
object structure
{
data: 'data'
keys: ['key1', 'key2', ... , 'keyN']
}
* Service has a array of total objects.
totalObject = [object1, object2, ... , objectN]
首先,我像這樣初始化服務的selectedObject。
selectedObject = totalObject;
然后,我像這樣在構造函數上初始化了組件B的selectedObject。
constructor(private wordService: WordService) {
this.words = wordService.selectedWords;
}
首先,組件B正確顯示了所有對象! 但是,當服務將新數組初始化為selectedObject時,組件B無法顯示所選對象。
// It's not working...
// remove
this.selectedWords.splice(0, this.selectedWords.length);
// add
for(let i in WORDS) {
if(WORDS[i].keys.indexOf(key) >= 0) {
this.selectedWords.push(WORDS[i]);
}
}
如果我了解您要執行的操作,那么您將嘗試通過兩個組件之間的引用來操縱對象,並使用一種服務作為代理,以使組件A對對象X的更改在組件B中可見該服務或多或少只是存儲引用的地方。
您將獲得更多的穩定性,使其更易於調試,並使其更具可擴展性,請考慮以下方式:
我已嘗試做您正在做的事情(很確定我們都有)。 隨着時間的流逝,這只是麻煩(特別是如果您將更多組件添加到組合中)。 即使開始時看起來似乎比較復雜,但使用通知/事件更容易處理。 由於您只需使用通知/事件中的有效負載進行測試(在測試中輕松觸發),因此測試變得更加容易,您無需設置其他組件,也無需讓它修改目標組件中使用的服務/引用。
但是,是的,整個“每個人都在看一個單例的參考”只是麻煩。
您可以簡單地創建一個服務並將其用作“單個”服務。
@Injectable()
export class DataService {
public selectedWords:string[] = [];
}
然后在應用程序的頂層提供它,這樣,整個應用程序將只使用一個實例:
@NgModule({
imports: [ BrowserModule ],
declarations: [ App, OtherComponent ],
bootstrap: [ App ],
providers: [ DataService ]
})
export class AppModule {}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.