#javascript #html #angular
#javascript #HTML #angular
Вопрос:
Я собираюсь разработать компонент в Angular, который будет служить шаблоном для будущих проектов. Идея заключается в том, что этот компонент состоит из матрицы строк и столбцов размером N на M (легко выполняемой с помощью HTML), в которой пробелы предназначены для других компонентов.
Проблема в том, что я хочу, чтобы некоторые компоненты могли использовать более одного пробела в этой сетке N на M. Например, диаграмма может иметь размер 2 x 2 в сетке N на M, в то время как карточка для числа вполне может быть 1 x 1.
Проблема в том, что я не хочу переписывать весь HTML каждый раз, когда я хочу, например, переместить компонент 2×2 вдоль сетки.
В этом примере черная сетка заполнена некоторыми компонентами (цветными), которые могут использовать в ней более одного пробела
До сих пор решения, которые я изучал, следующие:
- Использование стандартной грид-системы bootstrap (мне пришлось бы переписать HTML для компонентов, которые используют более одного пробела)
- Использование холста (не найдено способа «нарисовать» компонент в холсте)
- Опишите размер грида и распределение компонентов в коде, генерируя HTML и используя библиотеку ngx-dynamic-hooks для его отображения (не допускает ngIf и ngFor в сгенерированном HTML)
Есть ли более простой способ сделать это? Я что-то упускаю? Я приветствую все идеи: D
Комментарии:
1. material.angular.io/components/grid-list/overview Вы пробовали ? Вы оборачиваете все в
<mat-grid-list [cols]="nCols" >
илиcols="4"
, если вы придерживаетесь 4 столбцов. Затем каждый ваш компонент должен быть заключен в<mat-grid-title>
a с правильными параметрами.
Ответ №1:
Используйте https://material.angular.io/components/grid-list/examples
Я заменил .ts
переменную примера на ту, которая соответствует вашим ожиданиям. Я бы добавил переменную «opacity» в [style.opacity], чтобы вставить пустой заполнитель в первую строку вашего примера.
tiles: Tile[] = [
{text: 'ZERO', cols: 2, rows: 2, color: "none", opacity: 0},
{text: 'One', cols: 2, rows: 2, color: 'green' },
{text: 'Two', cols: 2, rows: 2, color: 'red' },
{text: 'Three',cols: 1, rows: 3, color: 'orange' },
{text: 'Four', cols: 3, rows: 3, color: 'red' },
];