angular-cn/packages/forms/src/directives/template_driven_errors.ts
Alan 3ba5220839 refactor(forms): ngForm element selector has been deprecated in favor of ng-form (#23721)
This has been deprecated to keep selector consistent with other core Angular selectors.  As element selectors are in kebab-case.

 Now deprecated:
 ```
 <ngForm #myForm="ngForm">
 ```

 After:
 ```
 <ng-form #myForm="ngForm">
 ```

You can also choose to supress this warnings by providing a config for `FormsModule` during import:

```ts
imports: [
 FormsModule.withConfig({warnOnDeprecatedNgFormSelector: 'never'});
]

Closes: #23678

PR Close #23721
2018-08-02 08:34:43 -07:00

78 lines
2.2 KiB
TypeScript

/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {FormErrorExamples as Examples} from './error_examples';
export class TemplateDrivenErrors {
static modelParentException(): void {
throw new Error(`
ngModel cannot be used to register form controls with a parent formGroup directive. Try using
formGroup's partner directive "formControlName" instead. Example:
${Examples.formControlName}
Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:
Example:
${Examples.ngModelWithFormGroup}`);
}
static formGroupNameException(): void {
throw new Error(`
ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.
Option 1: Use formControlName instead of ngModel (reactive strategy):
${Examples.formGroupName}
Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):
${Examples.ngModelGroup}`);
}
static missingNameException() {
throw new Error(
`If ngModel is used within a form tag, either the name attribute must be set or the form
control must be defined as 'standalone' in ngModelOptions.
Example 1: <input [(ngModel)]="person.firstName" name="first">
Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">`);
}
static modelGroupParentException() {
throw new Error(`
ngModelGroup cannot be used with a parent formGroup directive.
Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):
${Examples.formGroupName}
Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):
${Examples.ngModelGroup}`);
}
static ngFormWarning() {
console.warn(`
It looks like you're using 'ngForm'.
Support for using the 'ngForm' element selector has been deprecated in Angular v6 and will be removed
in Angular v9.
Use 'ng-form' instead.
Before:
<ngForm #myForm="ngForm">
After:
<ng-form #myForm="ngForm">
`);
}
}