@@ -353,11 +353,13 @@ function $RootScopeProvider() {
353
353
* - `newVal` contains the current value of the `watchExpression`
354
354
* - `oldVal` contains the previous value of the `watchExpression`
355
355
* - `scope` refers to the current scope
356
- * @param {boolean= } objectEquality Compare for object equality using {@link angular.equals} instead of
357
- * comparing for reference equality.
356
+ * @param {boolean=|function() } objectEquality Compare for object equality using {@link angular.equals} instead of
357
+ * comparing for reference equality. If a function is passed, it will be used as a replacement for {@link angular.equals}.
358
+ * @param {function() } copier Replacement function for {@link angular.copy} to save value into oldVal for next
359
+ change event.
358
360
* @returns {function() } Returns a deregistration function for this listener.
359
361
*/
360
- $watch : function ( watchExp , listener , objectEquality ) {
362
+ $watch : function ( watchExp , listener , objectEquality , copier ) {
361
363
var get = $parse ( watchExp ) ;
362
364
363
365
if ( get . $$watchDelegate ) {
@@ -370,7 +372,9 @@ function $RootScopeProvider() {
370
372
last : initWatchVal ,
371
373
get : get ,
372
374
exp : watchExp ,
373
- eq : ! ! objectEquality
375
+ eq : ! ! objectEquality ,
376
+ equals : isFunction ( objectEquality ) ? objectEquality : equals ,
377
+ copy : isFunction ( copier ) ? copier : copy
374
378
} ;
375
379
376
380
lastDirtyWatch = null ;
@@ -763,12 +767,12 @@ function $RootScopeProvider() {
763
767
if ( watch ) {
764
768
if ( ( value = watch . get ( current ) ) !== ( last = watch . last ) &&
765
769
! ( watch . eq
766
- ? equals ( value , last )
770
+ ? watch . equals ( value , last )
767
771
: ( typeof value === 'number' && typeof last === 'number'
768
772
&& isNaN ( value ) && isNaN ( last ) ) ) ) {
769
773
dirty = true ;
770
774
lastDirtyWatch = watch ;
771
- watch . last = watch . eq ? copy ( value , null ) : value ;
775
+ watch . last = watch . eq ? watch . copy ( value , null ) : value ;
772
776
watch . fn ( value , ( ( last === initWatchVal ) ? value : last ) , current ) ;
773
777
if ( ttl < 5 ) {
774
778
logIdx = 4 - ttl ;
0 commit comments