Form field

Form field a wrapping component for form control elements.

Overview

It's used to style certain controls that would otherwise be impossible to style with normal css and organize error messages alongside their associated form controls.

Usage

<daff-form-field>
  <input daff-input type="text" placeholder="Email" name="email" />
  <daff-error-message *ngIf="requiredError">This field is required.</daff-error-message>
</daff-form-field>

Creating a custom DaffFormFieldControl that works with DaffFormField

Creating a control that works easily with the form field is fairly straightforward. We've provided the DaffFormFieldControl abstract class to allow you to implement the required methods and properties on your control in a consistent manner. Implementing this interface will also ensure that any breaking updates will be caught at build time, instead of runtime.

To start, your control component must implement the DaffFormFieldControl interface. Once implemented, all you have to is provide the appropriate dependency key for the DaffFormField to hook into. You can do this by adding the key to the providers key of your component definition as follows:

@Component({
  selector: 'some-component',
  ...
  providers: [{provide: DaffFormFieldControl, useExisting: SomeComponent}],
})
export class SomeComponent implements DaffFormFieldControl<any> {
  ...
}

You can see examples of controls meeting this interface on DaffInput and DaffNativeSelect.

Troubleshooting

Error: A DaffFormFieldComponent must contain a DaffFormFieldControl

This error appears when your DaffFormField is missing a child control. As this component is intended to only be used with a child component that implements DaffFormFieldControl this error enforces that constraint at development time. To fix, make sure that your daff-form-field has a child component that implements this interface. An example of some components that we've built include: daff-input and daff-native-select.

Graycore, LLC © 2018 - 2024. Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.