You can use hideExpression to hide fields dynamically and Expression Properties for allows you to dynamically change many properties of a field.
Expression Properties allows you to dynamically change many properties of a field.
For example, you can disable a form field dynamically. The value of this property can be string or function.
you can see an example using string value here
{
key: 'text2',
type: 'input',
templateOptions: {
label: 'Hey!',
placeholder: 'This one is disabled if there is no text in the other input',
},
expressionProperties: {
'templateOptions.disabled': '!model.text',
},
},
The field will be hidden when model.text is empty
Example with function value:
{
key: 'country',
type: 'input',
templateOptions: {
label: 'field 2',
placeholder: ''
},
expressionProperties: {
'templateOptions.disabled': (model: any, formState: any, field: FormlyFieldConfig) => {
// access to the main model can be through `this.model` or `formState` or `model
return !formState.mainModel.text
},
}
}
The field will be hidden when formState.mainModel.text is empty
ALERT: You can use the formstate to store information. In the example we keep the model. formstate is a property of options. Read more
options = {
formState: {
mainModel: this.model,
},
};
HideExpression property is used to set the hide property of your field. The value of this property can be string, function or boolean. Below is an example of each of them.
First option with string value:
You can see an example with here
{
key: 'iLikeTwix',
type: 'checkbox',
templateOptions: {
label: 'I like twix',
},
hideExpression: '!model.name',
}
Second option with function value:
You can see an example here
{
key: 'country',
type: 'input',
templateOptions: {
label: 'City',
placeholder: 'set to 123'
},
hideExpression: (model: any, formState: any, field: FormlyFieldConfig) => {
// access to the main model can be through `this.model` or `formState` or `model
if (formState.mainModel && formState.mainModel.city) {
return formState.mainModel.city !== "123"
}
return true;
},
},
Third option with boolean. You can see an example here
HTML
<button (click)="toggle()">Click me</button>
TS
fields: FormlyFieldConfig[] = [
{
key: 'country',
type: 'input',
templateOptions: {
label: 'Street',
placeholder: ''
},
hideExpression: this.show
},
];
toggle(){
this.show = !this.show;
this.fields[1].hideExpression = this.show;
}