Сформировать массив внутри таблицы mat, созданной внутри наблюдаемого

у меня есть родительский компонент: родительский список содержит два дочерних компонента (список первого дочернего элемента, список второго дочернего элемента)

во втором компоненте дочернего списка: у меня есть таблица mat, которая получает данные для отображения в качестве входных данных, поэтому я создаю источник данных в ng OnChanges с экземпляром источника данных таблицы Mat), я использую модель выбора для обработки выбора row (iuse isAllSelected и основные методы Toggle).

Мне нужно передать выбранные строки первому дочернему компоненту, я использую сервис, который содержит субъект поведения, поэтому я затем перехожу к данным, используя методы набора данных.

в первом дочернем компоненте я использую массив форм внутри таблицы матов и обрабатываю выбор, делаю консольный журнал источника данных (вы видите в консоли, что когда я играю с выбором одного, многих или всех во втором компоненте списка, я есть цикл в консоли, и требуется время, чтобы выбрать все или один из второго компонента списка, может быть потому, что я создаю таблицу внутри методов подписки)

вы можете найти мой stack-blitz, содержащий код здесь,

https://stackblitz.com/edit/stackblitz-starters-frcek7?file=src%2Fapp%2Fparent-list%2Fparent-list.comComponent.html

попробуйте поиграть с select, и мы увидим, что это занимает некоторое время и повторяется столько раз в консоли.

Грамматика имеет значение.

zabop 24.04.2024 11:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть метод this.setData() в isAllSelected(). Это приводит к многократному выполнению .next вашего объекта.

isAllSelected() срабатывает при каждом обнаружении изменений несколько раз в вашем шаблоне.

        [checked] = "selection.hasValue() && isAllSelected()"
        [indeterminate] = "selection.hasValue() && !isAllSelected()"

если вы удалите этот вызов this.setData() из isAllSelected, вы увидите только один журнал консоли

обновлять:

в вашем masterToggle вы также вызываете изменение выбора для каждого элемента в таблице, что приводит к тому, что ваш предмет next для каждой строки.

Исправить это можно заменив

this.dataSource.data.forEach((row: any) => this.selection.select(row));

в это

this.selection.select(...this.dataSource.data);

так что это вызывает изменение выбора за один раз

если вы открываете stackblitz в Интернете и выполняете консоль, у меня всегда есть много консоли (многократный цикл) в первой боковой панели дочернего списка, у меня это не работает правильно

angular 19.04.2024 16:04

ты прочитал и исправил все, что я написал?

Danylo Gudz 19.04.2024 16:19

Другие вопросы по теме