在angular6中有多種跨元件傳遞資料的方法,這裡說一下使用ReplaySubject遇到的坑
1.在服務中定義
public current: any = new ReplaySubject<any>( 1 );
public dragcol:any = new ReplaySubject<any>( 1 )
2.接收參數
setdrag(data1:any,data2:any,data3:any,data4:any,data5:any,data6:any,data7:any){
this.current.next(data1)
}
setdragcol(data3:any,data4:any,data5:any,data6:any,data7:any,data8:any,data9:any){
this.dragcol.next(data3)
}
3.傳回資料
getdrag(){
return {a:this.current,b:this.dragstyle,c:this.dragsarray,d:this.loadDatasetId,e:this.loadDatadatasource,f:this.expressQuery}
}
getdragcol(){
return {a:this.dragcol,b:this.dragcolstyle,c:this.dragcolarray,d:this.loadDatasetId,e:this.loadDatadatasource,f:this.expressQuery}
}
4.使用服務,引入步驟略
在這裡,定義了兩個變量來傳遞資料current 和dragcol,調用的時候會在一個事件中同時調用getdrag() 和 getdragcol(),因為ReplaySubject本身有緩存的作用,是以這兩個會互相影響,當觸發getdrag() 的時候,getdragcol()曾經用過的資料又會被使用,angular6中并沒有說這種方法怎麼清除緩存,經過N次失敗的嘗試後,終于找到了一種方法,就是在事件結束的時候重新給傳一遍空字元串的參數