Редактор Героев
Создайте простой редактор героев.
Настройка для разработки локально
Следуйте инструкциям по настройке для создания нового проекта с именем
Структура файлов должна выглядеть так:
angular-tour-of-heroes
src
app
app.component.ts
app.module.ts
main.ts
index.html
styles.css
systemjs.config.js
tsconfig.json
node_modules ...
package.json
После завершения работы на этой странице приложение должно выглядеть так на этом примере.
Поддерживайте транспиляцию и запуск приложения
Введите следующую команду в окне терминала:
npm start
Эта команда запускает компилятор TypeScript в режиме "наблюдения", автоматически перекомпилируя код при его изменении. Команда одновременно запускает приложение в браузере и обновляет браузер при изменении кода.
Вы можете продолжить разработку Тура Героев, не останавливая перекомпиляцию или обновление браузера.
Отображение героя
Добавьте две свойства к AppComponent: свойство title для имени приложения и свойство hero для героя с именем "Буря."
app.component.ts (Класс AppComponent)
export class AppComponent {
title = 'Tour of Heroes';
hero = 'Windstorm';
}
Теперь обновите шаблон в декораторе @Component с привязкой данных к этим новым свойствам.
app.component.ts (@Component)
template: `<h1>{{title}}</h1><h2>{{hero}} details!</h2>`
Браузер обновляется и отображает заголовок и имя героя.
Двойные фигурные скобки — это синтаксис привязки интерполяции Angular. Эти привязки интерполяции представляют значения свойств компонента title и hero в виде строк внутри тегов заголовка HTML.
Дополнительную информацию об интерполяции можно найти на странице Отображение данных.
Объект героя
Герою нужны дополнительные свойства. Преобразуйте hero из литеральной строки в класс.
Создайте класс Hero со свойствами id и name. Добавьте эти свойства вверху файла app.component.ts, сразу под инструкцией импорта.
src/app/app.component.ts (Класс Hero)
export class Hero {
id: number;
name: string;
}
В классе Hero переделайте свойство компонента hero на тип Hero, затем инициализируйте его с экземпляром id класса 1 с именем Windstorm.
src/app/app.component.ts (свойство hero)
hero: Hero = {
id: 1,
name: 'Windstorm'
};
Поскольку вы изменили героя со строки на объект, обновите привязку в шаблоне, чтобы она ссылалась на свойство name героя.
template: `<h1>{{title}}</h1><h2>{{hero.name}} details!</h2>`
Браузер обновляется и продолжает отображать имя героя.
Добавление HTML с многострочными строками шаблонов
Чтобы отобразить все свойства героя, добавьте <div> для свойства id героя и <div> для свойства name героя. Для лучшей читаемости шаблона поместите каждый <div> на отдельную строку.
Кавычки вокруг шаблона компонента позволяют разместить элементы <h1>, <h2> и <div> на отдельных строках благодаря возможности «строковые литералы» в ES2015 и TypeScript. Для получения дополнительной информации см. Строковые литералы.
app.component.ts (шаблон AppComponent)
template: `
<h1>{{title}}</h1>
<h2>{{hero.name}} details!</h2>
<div><label>id: </label>{{hero.id}}</div>
<div><label>name: </label>{{hero.name}}</div>
`
Изменение имени героя
Пользователи должны иметь возможность изменять имя героя в поле ввода <input>. Поле ввода должно как отображать свойство name героя, так и обновлять это свойство по мере ввода пользователем.
Вам нужна двунаправленная привязка между элементом формы <input> и свойством hero.name.
Двунаправленная привязка
Переделайте имя героя в шаблоне так, чтобы оно выглядело следующим образом:
<div> <label>name: </label> <input [(ngModel)]="hero.name" placeholder="name"> </div>
[(ngModel)] — это синтаксис Angular для привязки свойства hero.name к полю ввода. Поток данных происходит в обоих направлениях: от свойства к полю ввода; и от поля ввода обратно к свойству.
К сожалению, сразу после этого изменения приложение выходит из строя. Если вы посмотрите в консоль браузера, вы увидите, что Angular жалуется, что "ngModel ... не является известным свойством input".
Хотя NgModel — это допустимая директива Angular, она недоступна по умолчанию. Она относится к необязательному модулю FormsModule. Вы должны включить его использование.
Импорт модуля FormsModule
Откройте файл app.module.ts и импортируйте символ FormsModule из библиотеки @angular/forms. Затем добавьте FormsModule в массив метаданных @NgModule модуля imports, который содержит список внешних модулей, используемых приложением.
Обновленный файл AppModule выглядит так:
app.module.ts (Импорт FormsModule)
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms'; // <-- NgModel lives here
import { AppComponent } from './app.component';
@NgModule({
imports: [
BrowserModule,
FormsModule // <-- import the FormsModule before binding with [(ngModel)]
],
declarations: [
AppComponent
],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Дополнительную информацию о
FormsModuleиngModelможно найти в разделе Двунаправленная привязка данных с ngModel руководства Формы и разделе Двунаправленная привязка с NgModel руководства Синтаксис шаблонов.
После обновления браузера приложение должно снова работать. Вы можете изменить имя героя, и изменения немедленно будут отражены в <h2> над полем ввода.
Путь, пройденный вами
Подведите итоги того, что вы построили.
- Приложение Tour of Heroes использует двойные фигурные скобки интерполяции (тип односторонней привязки данных) для отображения заголовка приложения и свойств объекта
Hero. - Вы написали многострочный шаблон, используя строковые литералы ES2015, чтобы сделать шаблон более читабельным.
- Вы добавили двунаправленную привязку данных к элементу
<input>с помощью встроенной директивыngModel. Эта привязка как отображает имя героя, так и позволяет пользователям его изменять. - Директива
ngModelраспространяет изменения на все другие привязкиhero.name.
Ваше приложение должно выглядеть так же, как на этом живом примере.
Вот полный файл app.component.ts в текущем состоянии:
src/app/app.component.ts
import { Component } from '@angular/core';
export class Hero {
id: number;
name: string;
}
@Component({
selector: 'my-app',
template: `
<h1>{{title}}</h1>
<h2>{{hero.name}} details!</h2>
<div><label>id: </label>{{hero.id}}</div>
<div>
<label>name: </label>
<input [(ngModel)]="hero.name" placeholder="name">
</div>
`
})
export class AppComponent {
title = 'Tour of Heroes';
hero: Hero = {
id: 1,
name: 'Windstorm'
};
}
Дальнейший путь
В следующей статье вы продолжите работу над приложением Tour of Heroes, чтобы отобразить список героев. Вы также позволите пользователю выбирать героев и отображать их подробности. Вы узнаете больше о том, как получать списки и связывать их с шаблоном.
Следующий шаг
Мастер/Детали
© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://v2.angular.io/docs/ts/latest/tutorial/toh-pt1.html