Отображение списка выбора¶
23.05.2022
В этом руководстве показано, как:
- Развернуть приложение Tour of Heroes для отображения списка героев.
- Позволить пользователям выбрать героя и отобразить его подробную информацию.
Пример приложения, которое описывается на этой странице, см.:
Создайте героев¶
Первым шагом будет создание героев для отображения.
Создайте файл mock-heroes.ts в каталоге src/app/. Определите константу HEROES как массив из десяти героев и экспортируйте его.
Файл должен выглядеть следующим образом.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Отображение героев¶
Откройте файл класса HeroesComponent и импортируйте макет HEROES.
1 | |
В классе HeroesComponent определите свойство компонента под названием heroes, чтобы открыть массив HEROES для привязки.
1 2 3 | |
Список героев с помощью *ngFor¶
Откройте файл шаблона HeroesComponent и внесите в него следующие изменения:
- Добавьте
<h2>в верхней части. - Ниже
<h2>добавьте элемент<ul>. - В элемент
<ul>вставьте элемент<li>. - Поместите
<button>внутрь<li>который отображает свойстваheroвнутри элементов<span>. - Добавьте CSS-классы для стилизации компонента.
чтобы он выглядел следующим образом:
1 2 3 4 5 6 7 8 9 | |
В результате будет выдана ошибка, поскольку свойство hero не существует. Чтобы получить доступ к каждому отдельному герою и перечислить их всех, добавьте *ngFor к <li> для итерации по списку героев:
1 | |
Директива *ngFor — это директива Angular repeater. Она повторяет ведущий элемент для каждого элемента списка.
Синтаксис в данном примере выглядит следующим образом:
| Синтаксис | Детали |
|---|---|
<li> | Принимающий элемент. |
heroes | Хранит список героев из класса HeroesComponent, список героев-макет. |
hero | Удерживает объект текущего героя для каждой итерации по списку. |
Не забудьте поставить звездочку * перед ngFor. Это важная часть синтаксиса.
После обновления браузера появится список героев.
Интерактивные элементы
Внутри элемента <li> добавьте элемент <button> для обертывания информации о герое, а затем сделайте его кликабельным. Для повышения доступности используйте элементы HTML, которые по своей сути являются интерактивными, вместо того чтобы добавлять слушатель событий к неинтерактивному элементу. В данном случае вместо добавления события к элементу <li> используется интерактивный элемент <button>.
Подробнее о доступности см. в Accessibility in Angular.
Стиль героев¶
Список героев должен быть привлекательным и визуально реагировать, когда пользователи наводят курсор и выбирают героя из списка.
В первом уроке вы задали основные стили для всего приложения в styles.css. Эта таблица стилей не включала стили для этого списка героев.
Вы можете добавить больше стилей в styles.css и продолжать расширять эту таблицу стилей по мере добавления компонентов.
Вместо этого вы можете определить частные стили для конкретного компонента. В этом случае все, что нужно компоненту, например, код, HTML и CSS, будет собрано в одном месте.
Такой подход облегчает повторное использование компонента в других местах и обеспечивает нужный внешний вид компонента, даже если глобальные стили отличаются.
Вы определяете частные стили либо в строке в массиве @Component.styles, либо в виде файлов таблиц стилей, определенных в массиве @Component.styleUrls.
Когда ng generate создал HeroesComponent, он создал пустую таблицу стилей heroes.component.css для HeroesComponent и указал на нее в @Component.styleUrls следующим образом.
1 2 3 4 5 | |
Откройте файл heroes.component.css и вставьте частные CSS стили для HeroesComponent из финального обзора кода.
Стили и таблицы стилей, определенные в метаданных @Component, привязаны к конкретному компоненту. Стили heroes.component.css применяются только к HeroesComponent и не влияют на внешний HTML или HTML в любом другом компоненте.
Просмотр подробностей¶
Когда пользователь щелкает на герое в списке, компонент должен отображать информацию о выбранном герое в нижней части страницы.
Код, приведенный в этом разделе, прослушивает событие щелчка по элементу героя и отображает/обновляет информацию о нем.
Добавьте привязку к событию щелчка мыши¶
Добавьте привязку события щелчка к <button> в <li> следующим образом:
1 2 3 4 5 | |
Это пример синтаксиса Angular event binding.
Круглые скобки вокруг click указывают Angular на необходимость прослушивания события click элемента <button>. Когда пользователь щелкает на элементе <button>, Angular выполняет выражение onSelect(hero).
В следующем разделе определим метод onSelect() в HeroesComponent для отображения героя, который был определен в выражении *ngFor.
Добавьте обработчик события щелчка мыши¶
Переименуйте свойство hero компонента в selectedHero, но не присваивайте ему никакого значения, поскольку при запуске приложения не существует выбранного героя.
Добавьте следующий метод onSelect(), который присваивает щелкнутому герою из шаблона значение selectedHero компонента.
1 2 3 4 | |
Добавьте раздел подробностей¶
В настоящее время у вас есть список в шаблоне компонента. Чтобы показать подробную информацию о герое, когда вы нажимаете на его имя в списке, добавьте секцию
в шаблон, который отображает подробную информацию о герое.
Добавьте следующее в heroes.component.html под секцией списка:
1 2 3 4 5 6 7 8 9 10 11 12 | |
Информация о герое должна отображаться только в том случае, если герой выбран. Когда компонент создается изначально, выбранного героя нет. Добавьте директиву *ngIf в <div>, который оборачивает детали героя. Эта директива указывает Angular на то, что секция должна отображаться только в том случае, если определено selectedHero после того, как герой был выбран щелчком на нем.
Не забывайте о символе звездочки * перед ngIf. Это критически важная часть синтаксиса.
Стиль выбранного героя¶
Для идентификации выбранного героя можно использовать CSS-класс .selected в стилях, добавленных ранее. Чтобы применить класс .selected к элементу <li>, когда пользователь щелкнет на нем, используйте привязку класса.
С помощью class binding в Angular можно условно добавлять и удалять CSS-класс. Добавьте [class.some-css-class]="some-condition" к элементу, который вы хотите стилизовать.
Добавьте следующую привязку [class.selected] к элементу <button> в шаблоне HeroesComponent:
1 | |
Если герой текущей строки совпадает с selectedHero, Angular добавляет CSS-класс selected. Когда оба героя разные, Angular удаляет класс.
Готовый <li> выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 | |
Окончательный обзор кода¶
Здесь находятся файлы кода, обсуждаемые на этой странице, включая стили HeroesComponent.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | |
Резюме¶
- Приложение Tour of Heroes отображает список героев с подробным представлением.
- Пользователь может выбрать героя и просмотреть его подробную информацию.
- Вы использовали
*ngForдля отображения списка. - Вы использовали
*ngIfдля условного включения или исключения блока HTML. - Вы можете переключить класс стиля CSS с помощью привязки
class.
