@@ -67,23 +67,26 @@ AngularFire.prototype = {
6767 if ( remote && check . call ( local ) == check . call ( remote ) ) {
6868 if ( check . call ( local ) == "[object Array]" ) {
6969 merged = local . concat ( remote ) ;
70+ if ( ! angular . equals ( merged , remote ) ) {
71+ self . _fRef . ref ( ) . set ( merged ) ;
72+ remote = merged ;
73+ }
7074 } else if ( check . call ( local ) == "[object Object]" ) {
7175 merged = local ;
7276 for ( var key in remote ) {
7377 merged [ key ] = remote [ key ] ;
7478 }
79+ self . _fRef . ref ( ) . update ( merged ) ;
80+ remote = merged ;
7581 }
7682 }
7783 // If remote value is null, overwrite remote value with local
7884 if ( remote === null ) {
79- merged = local ;
85+ self . _fRef . ref ( ) . set ( local ) ;
86+ remote = local ;
8087 }
8188 // If types don't match or the type is primitive, just overwrite the
8289 // local value with the remote value.
83- if ( merged ) {
84- self . _fRef . ref ( ) . update ( merged ) ;
85- return ;
86- }
8790 }
8891
8992 var resolve = false ;
@@ -155,7 +158,12 @@ AngularFire.prototype = {
155158 if ( angular . equals ( val , self . _remoteValue ) ) {
156159 return ;
157160 }
158- self . _fRef . ref ( ) . update ( val ) ;
161+ var check = Object . prototype . toString ;
162+ if ( check . call ( val ) == "[object Object]" ) {
163+ self . _fRef . ref ( ) . update ( val ) ;
164+ } else {
165+ self . _fRef . ref ( ) . set ( val ) ;
166+ }
159167 } , true ) ;
160168 // Also watch for scope destruction and unregister.
161169 $scope . $on ( "$destroy" , function ( ) {
0 commit comments