Angular2 — Формирует пользовательскую проверку — создает ссылку вне функции проверки ()

#angular

#angular

Вопрос:

Я создаю свою собственную проверку для определенного FormControl, но я не могу понять, как сделать ссылку на внешнее значение, определенное вне моей функции проверки.

код:

   @Component({
      selector: 'city-autocomplete',
      template: `
     <label for="incidade">Cidade/Comarca:</label>
     <input type="text" class="autocomplete-imput" id="incidade"
      [formControl]=inputcidade
      >
     `,
      styleUrls: ['./city-autocomplete.component.scss']
    })

    export class CityAutocompleteComponent {

    extenalValue :boolean = false



     inputcity = new FormControl('', [this.cityValidator]);

    //My Validator:
      cityValidator(ctrl: AbstractControl) {

        const isValid = this.extenalValue // <== this is UNDEFINED

        return isValid ? null : {
          cityValidator: {
            valid: false
          }
        }
      }
    } 
  

HTML:

ОШИБКА:

Это показывает, что extenalValue не определено.

Как я мог видеть, абстрактный элемент управления выполняется ПЕРЕД @Component, поэтому я не могу определить что-либо вне функции проверки.

МОЙ ВОПРОС:

Как я должен ссылаться на значения вне этой функции?

Спасибо.

Ответ №1:

Привязка ссылки к классу компонента исчезает при использовании ссылки на функцию.

Существуют различные способы исправить это, одним из вариантов является:

 inputcity = new FormControl('', [this.cityValidator.bind(this)]);
  

Небольшое замечание. Что функция проверки делает внутри компонента?

Комментарии:

1. Спасибо, я постараюсь это сделать. Я сделал эту функцию проверки внутри компонента, потому что это будет всего 2 или 3 строки кода, и она будет использоваться только здесь. Я подумал, что не стоит создавать в моем приложении еще один файл с новой директивой / функцией экспорта и вставлять это в бочки (index.ts) и модуль только потому, что это.