Автор, Вы, конечно, простите, но Вы действительно считаете, что люди которые используют angular в своей работе не смогут написать компонент в 3 строчки, чтоб чекбоксы выбрать? Компонент, кстати, на переиспользование тянет в рамках проекта, в котором он был написан. Ещё и дефолтная change detection strategy даст просадку. Вы же и так знаете в какой момент меняется состояние, почему бы не использовать OnPush и самому не говорить ChangeDetector”у когда произошли изменения, которые нужно проверить?
Я автора никак обидеть не хочу, просто статья тянет на "пишем гостевую книгу на PHP", которых на хабре было (и, наверное, еще будет вагон и маленькая тележка).
Конечно, там полно проблем, помимо описанных. Начиная с того, что автору неплохо было бы для этих целей использовать новую возможность CLI — ng g library. Так же, неплохо было бы, изучить стайлгайд из официальной документации и начать использовать ng lint по своему коду перед публикацией статей и комитов в репозиторий. Ну и с rxjs ознакомиться, само собой.
А сейчас статья выглядит как «эй, я неделю как использую ангуляр, смотри чо могу». Не в обиду автору, но ему самому неплохо было бы ещё статей почитать
Это моя первая статья на хабре, хотелось дебютировать. Спасибо за комментарии, этого я и ждал. Есть тот же самый пример написанный с Reactive Forms, там есть и subscribe() из rxjs. А вот ng lint еще не пробовал, только ts lint.
ng lint немножко поможет Вам соблюдать styleguide.
Про rxjs я писал не из-за subscribe и прочего, а просто непривычно видеть здесь имитацию задержки от сервера через setTimeout, если в боевых условиях там все равно будет Observable для асинхронности. В таком случае уместнее было бы использовать of(value) и через pipe добавить delayTime оператор.
Как уже сказал комментатор выше, при использовании стратегии Default, детектор будет реагировать на срабатывание детекторов соседних по стеку компонентов. Использование OnPush позволит вам запускать детектор вашего компонента только тогда, когда изменятся входящие данные.
Если инпуты не являются константами или обсерваблами, то факт их изменения должен быть обработан либо в onChanges, либо в сеттерах @Input() переменных. В данном конкретном случае при изменении selectedValues после стартовой инициализации (например, если состояние, которое кладется в чекбоксы, тоже подгружается) все отвалится.
можно написать ”onToggle(item)” и не страдать херней, пытаясь найти нужный элемент фильтром
вообще писать в onToggle() и т.п. обработчиках событий, код завязанный на факте апдейта биндинга — плохая идея, т.к. в данном случае мы имеем несколько независимых обработчиков, логика работы которых зависит от порядка их вызова (который может поменяться в следующей версии, например).
следует осторожнее менять из события внутреннего компонента стейт внешнег окомпонента, который потом прокидывается обратно внутрь. В данном случае, если поправить п.1, то это приведет к ошибке expression changed after checked.
есть интерфейс ControlValueAccessor и соответствующий провайдер, которые, будучи реализованы компонентом, делают этот компонент полноценным formControl с поддержкой биндингом ngModel либо реактивных форм
Как раз ожидал здесь увидеть использование ngModel с двусторонним байндингом. В таком виде компонент так себе подходит для повторного использования, будет много дублирующего кода методов 'onChange'
Angular: Создаем multiple checkbox компонент, который подойдет для повторного использования