Pull to refresh
3
0
Pavel @sy0

Front-end developer

Send message
вы не России собираетесь работать

Вообще-то, в России — одни из самых высоких налогов в Европе.
Валидатор меняется, а статус — нет, потому что метод setValidators делает простое присваивание. Для изменения статуса должно произойти изменение значения или ручное обновление через метод updateValueAndValidity().

Я сделал для вашего кейса небольшую песочницу.
Нужно различать атрибут disabled у элемента и статус DISABLED у контрола. Статус DISABLED исключает контрол из валидации, а также из значения его родителя (группы или массива) если таковой имеется. При установке или снятии этого статуса как раз и вызывается метод setDisabledState у ControlValueAccessor. Этот метод, как я написал (правда, не углубляясь в статусы — тему следующей статьи), устанавливает атрибут disabled (или другим путём блокирует для пользователя изменение значения).

Если у вас шаблонная форма, то за статусами контролов следить не нужно, нужно управлять атрибутами. Если же реактивная — следует управлять статусами. Для этого есть упомянутые вами методы disable() и enable(), а также возможность указать значение для метода setValue() в формате {value: 'Значение', disabled: true}.
Если вам не нужно получать экземпляр NgForm в переменную formDir, можно записать даже так:
<form (ngSubmit)="submit($event)">
  ...
</form>


Что может быть лаконичнее?:)
Другое дело, что сам коллбэк написан некорректно: нет возвращаемого значения, а значит у нас на выходе получится массив из undefined.

Верный вариант:
arr.map(function (item) {
  return someFn(item);
});


Вариант для ES6:
arr.map(item => someFn(item));
Ну, на самом деле, упростить таким образом может быть нельзя, потому что map передаёт в коллбэк несколько аргументов.

Довольно широко известен такой пример:
['10','10','10','10','10'].map(parseInt)
// [10, NaN, 2, 3, 4]

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Registered
Activity