Я создал пользовательский элемент управления формой, как мне подписаться на его пользовательское событие в цепочке жизненного цикла OnInit?

#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», поэтому я не уверен, как я мог бы это сделать? Спасибо.