Я думаю, что нашел способ сломать его, взять его в свои руки и хочу опубликовать свое объяснение для всех, кто приходит посмотреть.
В этой части это просто создание итерируемой карты объекта 'checkboxGroup.controls'. Это можно было использовать для зацикливания в шаблоне и установки всех флажков. Поскольку моя структура формы уже создана из массивов объектов с известными свойствами, мне это не нужно. Подчеркивания здесь не делают ничего особенного, людям просто нравится использовать их для личных переменных.
this.controlNames = Object.keys(this.checkboxGroup.controls).map(_=>_);
Для тех, кто плохо знаком с функциями стрелок или некоторыми соглашениями javascript, приведенный выше код не совсем, но по сути является сокращением для этого:
this.controlNames = [];
Object.keys(this.checkboxGroup.controls).forEach(function(key) {
this.controlNames.push(key);
}
Я изменил короткие переменные на более длинные, чтобы их было легче понять во второй части. Это отображает изменения значений, наблюдаемые как итеративный 'changesObj', извлекает ключи и фильтрует ключи по случаям, когда ключ имеет истинное значение. Код filter(key => changesObj[key])
возвращает ключ, если ключ не нулевой, неопределенный или ложный.
this.selectedNames = this.checkboxGroup.valueChanges.pipe(map(changesObj => Object.keys(changesObj).filter(key => changesObj[key])));
По сути, это просто сокращение:
function propNotFalse (changes, prop) {
return changes[prop] == true;
}
this.selectedNames = this.alternateFilter = Object.keys(this.checkboxGroup.valueChanges).filter(this.propNotFalse.bind(null, this.checkboxGroup.valueChanges));