1- import { PromiseWrapper } from 'angular2/src/facade/async' ;
1+ import { PromiseWrapper , ObservableWrapper , EventEmitter } from 'angular2/src/facade/async' ;
22import { StringMapWrapper , List , ListWrapper } from 'angular2/src/facade/collection' ;
33import { isPresent , CONST_EXPR } from 'angular2/src/facade/lang' ;
44import { Directive } from 'angular2/src/core/annotations/decorators' ;
@@ -15,11 +15,16 @@ const formDirectiveBinding = CONST_EXPR(new Binding(
1515
1616@Directive ( {
1717 selector : 'form:not([ng-no-form]):not([ng-form-model]),ng-form,[ng-form]' ,
18- hostInjector : [ formDirectiveBinding ]
18+ hostInjector : [ formDirectiveBinding ] ,
19+ hostListeners : {
20+ 'submit' : 'onSubmit()' ,
21+ } ,
22+ events : [ 'ngSubmit' ]
1923} )
2024export class TemplateDrivenFormDirective extends ControlContainerDirective implements
2125 FormDirective {
2226 form : ControlGroup ;
27+ ngSubmit = new EventEmitter ( ) ;
2328
2429 constructor ( ) {
2530 super ( ) ;
@@ -34,36 +39,44 @@ export class TemplateDrivenFormDirective extends ControlContainerDirective imple
3439
3540 get value ( ) : any { return this . form . value ; }
3641
42+ get errors ( ) : any { return this . form . errors ; }
43+
3744 addControl ( dir : ControlDirective ) : void {
3845 this . _later ( _ => {
39- var group = this . _findContainer ( dir . path ) ;
46+ var container = this . _findContainer ( dir . path ) ;
4047 var c = new Control ( "" ) ;
4148 setUpControl ( c , dir ) ;
42- group . addControl ( dir . name , c ) ;
49+ container . addControl ( dir . name , c ) ;
50+ c . updateValidity ( ) ;
4351 } ) ;
4452 }
4553
4654 getControl ( dir : ControlDirective ) : Control { return < Control > this . form . find ( dir . path ) ; }
4755
4856 removeControl ( dir : ControlDirective ) : void {
4957 this . _later ( _ => {
50- var c = this . _findContainer ( dir . path ) ;
51- if ( isPresent ( c ) ) c . removeControl ( dir . name )
58+ var container = this . _findContainer ( dir . path ) ;
59+ if ( isPresent ( container ) ) {
60+ container . removeControl ( dir . name ) container . updateValidity ( ) ;
61+ }
5262 } ) ;
5363 }
5464
5565 addControlGroup ( dir : ControlGroupDirective ) : void {
5666 this . _later ( _ => {
57- var group = this . _findContainer ( dir . path ) ;
67+ var container = this . _findContainer ( dir . path ) ;
5868 var c = new ControlGroup ( { } ) ;
59- group . addControl ( dir . name , c ) ;
69+ container . addControl ( dir . name , c ) ;
70+ c . updateValidity ( ) ;
6071 } ) ;
6172 }
6273
6374 removeControlGroup ( dir : ControlGroupDirective ) : void {
6475 this . _later ( _ => {
65- var c = this . _findContainer ( dir . path ) ;
66- if ( isPresent ( c ) ) c . removeControl ( dir . name )
76+ var container = this . _findContainer ( dir . path ) ;
77+ if ( isPresent ( container ) ) {
78+ container . removeControl ( dir . name ) container . updateValidity ( ) ;
79+ }
6780 } ) ;
6881 }
6982
@@ -74,6 +87,11 @@ export class TemplateDrivenFormDirective extends ControlContainerDirective imple
7487 } ) ;
7588 }
7689
90+ onSubmit ( ) {
91+ ObservableWrapper . callNext ( this . ngSubmit , null ) ;
92+ return false ;
93+ }
94+
7795 _findContainer ( path : List < string > ) : ControlGroup {
7896 ListWrapper . removeLast ( path ) ;
7997 return < ControlGroup > this . form . find ( path ) ;
0 commit comments