@@ -449,7 +449,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
449
449
* related scope, under this name.
450
450
*/
451
451
var formDirectiveFactory = function ( isNgForm ) {
452
- return [ '$timeout' , function ( $timeout ) {
452
+ return [ '$timeout' , '$parse' , function ( $timeout , $parse ) {
453
453
var formDirective = {
454
454
name : 'form' ,
455
455
restrict : isNgForm ? 'EAC' : 'E' ,
@@ -491,21 +491,21 @@ var formDirectiveFactory = function(isNgForm) {
491
491
}
492
492
493
493
var parentFormCtrl = controller . $$parentForm ;
494
+ var setter = nameAttr ? getSetter ( controller . $name ) : noop ;
494
495
495
496
if ( nameAttr ) {
496
- setter ( scope , controller . $name , controller , controller . $name ) ;
497
+ setter ( scope , controller ) ;
497
498
attr . $observe ( nameAttr , function ( newValue ) {
498
499
if ( controller . $name === newValue ) return ;
499
- setter ( scope , controller . $name , undefined , controller . $name ) ;
500
+ setter ( scope , undefined ) ;
500
501
parentFormCtrl . $$renameControl ( controller , newValue ) ;
501
- setter ( scope , controller . $name , controller , controller . $name ) ;
502
+ setter = getSetter ( controller . $name ) ;
503
+ setter ( scope , controller ) ;
502
504
} ) ;
503
505
}
504
506
formElement . on ( '$destroy' , function ( ) {
505
507
parentFormCtrl . $removeControl ( controller ) ;
506
- if ( nameAttr ) {
507
- setter ( scope , attr [ nameAttr ] , undefined , controller . $name ) ;
508
- }
508
+ setter ( scope , undefined ) ;
509
509
extend ( controller , nullFormCtrl ) ; //stop propagating child destruction handlers upwards
510
510
} ) ;
511
511
}
@@ -514,6 +514,13 @@ var formDirectiveFactory = function(isNgForm) {
514
514
} ;
515
515
516
516
return formDirective ;
517
+
518
+ function getSetter ( expression ) {
519
+ if ( expression === '' ) {
520
+ return $parse ( 'this[""]' ) . assign ;
521
+ }
522
+ return $parse ( expression ) . assign || noop ;
523
+ }
517
524
} ] ;
518
525
} ;
519
526
0 commit comments