#angular #ngx-formly
#angular #ngx-formly
Вопрос:
мой пользовательский элемент управления формой имеет событие «optionChanged», которое выглядит следующим образом:
@Component({
selector: 'app-formly-company-search',
templateUrl: './formly-company-search.component.html',
styleUrls: ['./formly-company-search.component.scss']
})
export class FormlyCompanySearchComponent extends FieldType implements OnInit {
label: string;
@Output() optionChanged = new EventEmitter<string>();
constructor() {
super();
}
ngOnInit() {
this.label = this.field.templateOptions.label;
if (this.field.templateOptions.required) {
this.label = " *";
}
}
onOptionChanged(option) {
//console.log("new option: ", option);
this.field.templateOptions.optionChanged(option);
}
}
Вызывая optionChanged в templateOptions, как указано выше, я могу реализовать обработчик событий, когда я определяю элемент управления в моем FormlyFieldsConfig следующим образом:
this.fields = [
{
fieldGroup: [
{
key: 'EmployerKey',
type: 'company-search',
templateOptions: {
required: true,
label: 'Employer Search',
optionChanged: ($event) => {
this.setPaySchedulesForEmployer2($event);
this.setTaxYearsForEmployer($event);
}
}
},
Который работает хорошо. Но я также хотел бы подписаться на это событие (примерно так, как я бы сделал для события valueChanges) в цепочке жизненного цикла OnInit для другого элемента управления, подобного этому:
{
key: 'PayFrequency',
type: 'select',
templateOptions: {
label: 'Pay Frequency',
valueProp: 'Key',
labelProp: 'Text'
},
hooks: {
onInit: (field: FormlyFieldConfig) => {
let employerControl = this.form.get("EmployerKey");
this.subs.add(employerControl.optionChanged.subscribe(result => {
this.onEmployerChanged(field);
}));
}
}
},
Но, конечно, у FormControl «employerControl» нет этого события «optionChanged», поэтому я не уверен, как я мог бы это сделать? Спасибо.