@@ -24,6 +24,8 @@ function $InterpolateProvider() {
2424 var index = 0 ;
2525 var parts = [ ] ;
2626 var expressions = [ ] ;
27+ var expressionFns = [ ] ;
28+ var expressionPositions = [ ] ;
2729 var startIndex , endIndex , exp , expFn ;
2830 while ( index < text . length ) {
2931 startIndex = text . indexOf ( '{{' , index ) ;
@@ -36,26 +38,45 @@ function $InterpolateProvider() {
3638 }
3739 exp = text . substring ( startIndex + 2 , endIndex ) ;
3840 expFn = $parse ( exp ) ;
39- parts . push ( expFn ) ;
4041 expressions . push ( exp ) ;
42+ expressionFns . push ( expFn ) ;
43+ expressionPositions . push ( parts . length ) ;
44+ parts . push ( expFn ) ;
4145 index = endIndex + 2 ;
4246 } else {
4347 parts . push ( unescapeText ( text . substring ( index ) ) ) ;
4448 break ;
4549 }
4650 }
4751
52+ function compute ( values ) {
53+ _ . forEach ( values , function ( value , i ) {
54+ parts [ expressionPositions [ i ] ] = stringify ( value ) ;
55+ } ) ;
56+ return parts . join ( '' ) ;
57+ }
58+
59+
4860 if ( expressions . length || ! mustHaveExpressions ) {
4961 return _ . extend ( function interpolationFn ( context ) {
50- return _ . reduce ( parts , function ( result , part ) {
51- if ( _ . isFunction ( part ) ) {
52- return result + stringify ( part ( context ) ) ;
53- } else {
54- return result + part ;
55- }
56- } , '' ) ;
62+ var values = _ . map ( expressionFns , function ( expressionFn ) {
63+ return expressionFn ( context ) ;
64+ } ) ;
65+ return compute ( values ) ;
5766 } , {
58- expressions : expressions
67+ expressions : expressions ,
68+ $$watchDelegate : function ( scope , listener ) {
69+ var lastValue ;
70+ return scope . $watchGroup ( expressionFns , function ( newValues , oldValues ) {
71+ var newValue = compute ( newValues ) ;
72+ listener (
73+ newValue ,
74+ ( newValues === oldValues ? newValue : lastValue ) ,
75+ scope
76+ ) ;
77+ lastValue = newValue ;
78+ } ) ;
79+ }
5980 } ) ;
6081 }
6182
0 commit comments