在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次失败的尝试后,终于找到了一种方法,就是在事件结束的时候重新给传一遍空字符串的参数
/*不能插入图片了*/