@@ -9,11 +9,11 @@ import 'rxjs/add/operator/mergeMap';
9
9
import 'rxjs/add/operator/map' ;
10
10
11
11
export function FirebaseListFactory (
12
- absoluteUrlOrDbRef :string |
13
- firebase . database . Reference |
14
- firebase . database . Query ,
12
+ absoluteUrlOrDbRef :string |
13
+ firebase . database . Reference |
14
+ firebase . database . Query ,
15
15
{ preserveSnapshot, query = { } } :FirebaseListFactoryOpts = { } ) : FirebaseListObservable < any > {
16
-
16
+
17
17
let ref : firebase . database . Reference | firebase . database . Query ;
18
18
19
19
utils . checkForUrlOrFirebaseRef ( absoluteUrlOrDbRef , {
@@ -95,7 +95,7 @@ export function FirebaseListFactory (
95
95
return firebaseListObservable ( queryRef , { preserveSnapshot } ) ;
96
96
} )
97
97
. subscribe ( subscriber ) ;
98
-
98
+
99
99
return ( ) => sub . unsubscribe ( ) ;
100
100
} ) ;
101
101
}
@@ -118,7 +118,7 @@ function firebaseListObservable(ref: firebase.database.Reference | firebase.data
118
118
obs . complete ( )
119
119
} ) ;
120
120
121
- ref . on ( 'child_added' , ( child : any , prevKey : string ) => {
121
+ let addFn = ref . on ( 'child_added' , ( child : any , prevKey : string ) => {
122
122
arr = onChildAdded ( arr , child , prevKey ) ;
123
123
// only emit the array after the initial load
124
124
if ( hasInitialLoad ) {
@@ -128,7 +128,7 @@ function firebaseListObservable(ref: firebase.database.Reference | firebase.data
128
128
if ( err ) { obs . error ( err ) ; obs . complete ( ) ; }
129
129
} ) ;
130
130
131
- ref . on ( 'child_removed' , ( child : any ) => {
131
+ let remFn = ref . on ( 'child_removed' , ( child : any ) => {
132
132
arr = onChildRemoved ( arr , child )
133
133
if ( hasInitialLoad ) {
134
134
obs . next ( preserveSnapshot ? arr : arr . map ( utils . unwrapMapFn ) ) ;
@@ -137,7 +137,7 @@ function firebaseListObservable(ref: firebase.database.Reference | firebase.data
137
137
if ( err ) { obs . error ( err ) ; obs . complete ( ) ; }
138
138
} ) ;
139
139
140
- ref . on ( 'child_changed' , ( child : any , prevKey : string ) => {
140
+ let chgFn = ref . on ( 'child_changed' , ( child : any , prevKey : string ) => {
141
141
arr = onChildChanged ( arr , child , prevKey )
142
142
if ( hasInitialLoad ) {
143
143
// This also manages when the only change is prevKey change
@@ -147,7 +147,11 @@ function firebaseListObservable(ref: firebase.database.Reference | firebase.data
147
147
if ( err ) { obs . error ( err ) ; obs . complete ( ) ; }
148
148
} ) ;
149
149
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
+ }
151
155
} ) ;
152
156
return listObs ;
153
157
}
0 commit comments