• I want to break free. Чему и как учиться, чтобы сбежать от 1С
    +1
    вы не России собираетесь работать

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

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

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


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

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


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

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