@@ -9,11 +9,11 @@ import 'rxjs/add/operator/mergeMap';
99import 'rxjs/add/operator/map' ;
1010
1111export function FirebaseListFactory (
12- absoluteUrlOrDbRef :string |
13- firebase . database . Reference |
14- firebase . database . Query ,
12+ absoluteUrlOrDbRef :string |
13+ firebase . database . Reference |
14+ firebase . database . Query ,
1515 { preserveSnapshot, query = { } } :FirebaseListFactoryOpts = { } ) : FirebaseListObservable < any > {
16-
16+
1717 let ref : firebase . database . Reference | firebase . database . Query ;
1818
1919 utils . checkForUrlOrFirebaseRef ( absoluteUrlOrDbRef , {
@@ -95,7 +95,7 @@ export function FirebaseListFactory (
9595 return firebaseListObservable ( queryRef , { preserveSnapshot } ) ;
9696 } )
9797 . subscribe ( subscriber ) ;
98-
98+
9999 return ( ) => sub . unsubscribe ( ) ;
100100 } ) ;
101101}
@@ -118,7 +118,7 @@ function firebaseListObservable(ref: firebase.database.Reference | firebase.data
118118 obs . complete ( )
119119 } ) ;
120120
121- ref . on ( 'child_added' , ( child : any , prevKey : string ) => {
121+ let addFn = ref . on ( 'child_added' , ( child : any , prevKey : string ) => {
122122 arr = onChildAdded ( arr , child , prevKey ) ;
123123 // only emit the array after the initial load
124124 if ( hasInitialLoad ) {
@@ -128,7 +128,7 @@ function firebaseListObservable(ref: firebase.database.Reference | firebase.data
128128 if ( err ) { obs . error ( err ) ; obs . complete ( ) ; }
129129 } ) ;
130130
131- ref . on ( 'child_removed' , ( child : any ) => {
131+ let remFn = ref . on ( 'child_removed' , ( child : any ) => {
132132 arr = onChildRemoved ( arr , child )
133133 if ( hasInitialLoad ) {
134134 obs . next ( preserveSnapshot ? arr : arr . map ( utils . unwrapMapFn ) ) ;
@@ -137,7 +137,7 @@ function firebaseListObservable(ref: firebase.database.Reference | firebase.data
137137 if ( err ) { obs . error ( err ) ; obs . complete ( ) ; }
138138 } ) ;
139139
140- ref . on ( 'child_changed' , ( child : any , prevKey : string ) => {
140+ let chgFn = ref . on ( 'child_changed' , ( child : any , prevKey : string ) => {
141141 arr = onChildChanged ( arr , child , prevKey )
142142 if ( hasInitialLoad ) {
143143 // This also manages when the only change is prevKey change
@@ -147,7 +147,11 @@ function firebaseListObservable(ref: firebase.database.Reference | firebase.data
147147 if ( err ) { obs . error ( err ) ; obs . complete ( ) ; }
148148 } ) ;
149149
150- return ( ) => ref . off ( ) ;
150+ return ( ) => {
151+ ref . off ( 'child_added' , addFn ) ;
152+ ref . off ( 'child_removed' , remFn ) ;
153+ ref . off ( 'child_changed' , chgFn ) ;
154+ }
151155 } ) ;
152156 return listObs ;
153157}
0 commit comments