@@ -402,7 +402,14 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
402
402
if ( ( optionElement = optionGroup [ index ] . element ) [ 0 ] . selected ) {
403
403
key = optionElement . val ( ) ;
404
404
if ( keyName ) locals [ keyName ] = key ;
405
- if ( trackFn ) {
405
+ if ( selectAsFn ) {
406
+ var collectionWithValueName = { } ;
407
+ collectionWithValueName [ valueName ] = collection [ key ] ;
408
+ for ( i = 0 ; i < collection . length ; i ++ ) {
409
+ locals [ valueName ] = collection [ i ] ;
410
+ if ( selectAsFn ( scope , locals ) == selectAsFn ( scope , collectionWithValueName ) ) break ;
411
+ }
412
+ } else if ( trackFn ) {
406
413
for ( trackIndex = 0 ; trackIndex < collection . length ; trackIndex ++ ) {
407
414
locals [ valueName ] = collection [ trackIndex ] ;
408
415
if ( trackFn ( scope , locals ) == key ) break ;
@@ -421,9 +428,21 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
421
428
} else if ( key === '' ) {
422
429
value = null ;
423
430
} else {
424
- if ( trackFn ) {
431
+ if ( selectAsFn ) {
432
+ for ( i = 0 ; i < collection . length ; i ++ ) {
433
+ locals [ valueName ] = collection [ i ] ;
434
+ var collectionWithValueName = { } ;
435
+ collectionWithValueName [ valueName ] = collection [ key ] ;
436
+
437
+ if ( selectAsFn ( scope , locals ) === selectAsFn ( scope , collectionWithValueName ) ) {
438
+ value = selectAsFn ( scope , locals ) ;
439
+ break ;
440
+ }
441
+ }
442
+ } else if ( trackFn ) {
425
443
for ( trackIndex = 0 ; trackIndex < collection . length ; trackIndex ++ ) {
426
444
locals [ valueName ] = collection [ trackIndex ] ;
445
+
427
446
if ( trackFn ( scope , locals ) == key ) {
428
447
value = valueFn ( scope , locals ) ;
429
448
break ;
0 commit comments