Отображение списка выбора¶
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
.