第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

跪求!Observable使用場(chǎng)景的一個(gè)問(wèn)題

跪求!Observable使用場(chǎng)景的一個(gè)問(wèn)題

寶慕林4294392 2019-11-03 09:41:14
環(huán)境:Angular2+現(xiàn)在有一個(gè)組件內(nèi)部classDemo01{data$:Observable;constructor(privateservice:MyService){}OnInit(){this.data$=this.service.getData();}submit(){//在這里我需要拿到this.data$中的數(shù)據(jù)去做一些處理//如果直接對(duì)this.data$進(jìn)行訂閱的話(huà),就會(huì)進(jìn)入MyService中的getData()方法重新獲取一次數(shù)據(jù),但是我不想這樣//**目前我的辦法是,看下面的ts**}}Service:classMyService{getData():Observable{returnof(['1','2','3','4'])//這里有可能是個(gè)http請(qǐng)求}}模板:{{item}}Submit我的解決辦法是:classDemo01{data$:Observable;data:string[]constructor(privateservice:MyService){}OnInit(){this.data$=this.service.getData().pipe(//使用tap操作符監(jiān)控this.data$,將其中的數(shù)據(jù)緩存一份到this.datatap(data=>{this.data=data;}));}submit(){//在這里使用this.data}}不知道是否還有其他的操作能夠解決這種場(chǎng)景呢?
查看完整描述

2 回答

?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

找到答案了,使用publishReplay和refCount操作符
classDemo01{
data$:Observable;
data:string[]
constructor(privateservice:MyService){
}
OnInit(){
//使用這2個(gè)操作符,會(huì)把'冷'的變成'熱'的
this.data$=this.service.getData().pipe(
publishReplay(),
refCount()
);
}
submit(){
//即使當(dāng)前this.data$被綁定到模板中了,在這里再次訂閱this.data$,也不會(huì)執(zhí)行service中的getData()方法中Observable內(nèi)部的of()方法
this.data$.subscribe((array)=>{
})
}
}
參考
                            
查看完整回答
反對(duì) 回復(fù) 2019-11-03
?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊

我理解問(wèn)題是,一個(gè)請(qǐng)求完成后,多處調(diào)用時(shí)不想再次請(qǐng)求。。如果我理解正確的話(huà),那存在service中,多處注入該service就好了。。何必這么麻煩。。service層本身存在就是為了數(shù)據(jù)通信的。。
                            
查看完整回答
反對(duì) 回復(fù) 2019-11-03
  • 2 回答
  • 0 關(guān)注
  • 390 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)