данный момент их 3 типа всего. Единственное что их различает - +- несколько полей, все остальное практически одинаково.
При открытии модалки, в data я передаю documentId, и documentType. В самой модалке у меня
1) панель с кнопками (универсальная для всех компонентов, находится в родительском компоненте).
2) компонент, в зависимости от того какой documentType был передан (в данный момент всего 3 компонента)
2.1) компонент с формой для заполнения данными
2.2) компонент с таблицей
И вот теперь вопросы:
1. Для каждого типа документа я создаю отдельный компонент, в который из сервиса получаю данные и через @Input() передаю их в форму и таблицу. Правильный ли такой подход, или же лучше в компоненте с формой и таблицей через сервис получать данные?
2. Для того чтобы вернуть данные обратно в родительский компонент, использую @ViewChild или @Output(). Может быть проще возвращать данные через service (еще не знаю каким образом точно)??
3. В данный момент кнопки, активны или не активны, в зависимости коректные ли данные. Для этого я постоянно делаю проверки, из-за чего иногда может возникать ошибка ExpressionChangedAfterItHasBeenCheckedError (как писал рание, и уже практически разобрался). Как еще можно реализовать проверки на корректность?
4. Правильный ли такой подход в целом? Ведь у меня 1 модалка, в которой просто выбирается нужный компонент. Может проще для каждого документа создавать свои модалки? Но тогда больше файлов и сам модуль будет больше.
Буду благодарен за любую помощь)))
1. Лучше разбивать компоненты на обособленные кирпичики, и если есть возможность, то конфигурировать конкретный тип этими компонентами. Например, можно реализовывать компоненты адаптеры между конкретным контрактом документа и конкретным компонентом, который отображает "таблицу". Эти адаптеры по большей части должны быть обособленными. 2. В случае, если необходимо воздействовать с родительским компонентом, то Output предпочтительнее. Выходит немного больше кода, но зато прекрасно видно связи между компонентами. 3. Нужен более конкретный пример, где возникает данная ошибка. Но отмечу, что если используется полностью реактивный подход, то такая ошибка не будет встречаться. 4. Иметь единый компонент для отображения любого типа сущности - хороший подход.
Обсуждают сегодня