Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 12837e1

Browse files
committed
fix(forms): improve error message when ngFormModel is missing a form
Closes angular#8136 Closes angular#8143
1 parent 9092ac7 commit 12837e1

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

modules/angular2/src/common/forms/directives/ng_form_model.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import {CONST_EXPR} from 'angular2/src/facade/lang';
1+
import {CONST_EXPR, isBlank} from 'angular2/src/facade/lang';
22
import {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';
3+
import {BaseException} from 'angular2/src/facade/exceptions';
34
import {ObservableWrapper, EventEmitter} from 'angular2/src/facade/async';
45
import {
56
SimpleChange,
@@ -114,6 +115,7 @@ export class NgFormModel extends ControlContainer implements Form,
114115
}
115116

116117
ngOnChanges(changes: {[key: string]: SimpleChange}): void {
118+
this._checkFormPresent();
117119
if (StringMapWrapper.contains(changes, "form")) {
118120
var sync = composeValidators(this._validators);
119121
this.form.validator = Validators.compose([this.form.validator, sync]);
@@ -173,4 +175,11 @@ export class NgFormModel extends ControlContainer implements Form,
173175
dir.valueAccessor.writeValue(ctrl.value);
174176
});
175177
}
178+
179+
private _checkFormPresent() {
180+
if (isBlank(this.form)) {
181+
throw new BaseException(
182+
`ngFormModel expects a form. Please pass one in. Example: <form [ngFormModel]="myCoolForm">`);
183+
}
184+
}
176185
}

modules/angular2/test/common/forms/integration_spec.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,19 @@ export function main() {
6262
});
6363
}));
6464

65+
it("should throw if a form isn't passed into ngFormModel",
66+
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
67+
var t = `<div [ngFormModel]="form">
68+
<input type="text" ngControl="login">
69+
</div>`;
70+
71+
tcb.overrideTemplate(MyComp, t).createAsync(MyComp).then((fixture) => {
72+
expect(() => fixture.detectChanges())
73+
.toThrowError(new RegExp(`ngFormModel expects a form. Please pass one in.`));
74+
async.done();
75+
});
76+
}));
77+
6578
it("should update the control group values on DOM change",
6679
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
6780
var form = new ControlGroup({"login": new Control("oldValue")});

0 commit comments

Comments
 (0)