diff options
author | Maxim <54762420+mpstv@users.noreply.github.com> | 2021-12-09 20:48:14 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-09 20:48:14 +0300 |
commit | c7886a1d9263457848448cdda1c2646e87ef053f (patch) | |
tree | 5ea1d024df82547781a771959edc1fb236e19f05 /files/ru/learn | |
parent | d1fa9e8afa695d043c5bec2bff99354cdfcf71e9 (diff) | |
download | translated-content-c7886a1d9263457848448cdda1c2646e87ef053f.tar.gz translated-content-c7886a1d9263457848448cdda1c2646e87ef053f.tar.bz2 translated-content-c7886a1d9263457848448cdda1c2646e87ef053f.zip |
Translate angular_todo_list_beginning page (#2632)
Diffstat (limited to 'files/ru/learn')
-rw-r--r-- | files/ru/learn/tools_and_testing/client-side_javascript_frameworks/angular_todo_list_beginning/index.html | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/files/ru/learn/tools_and_testing/client-side_javascript_frameworks/angular_todo_list_beginning/index.html b/files/ru/learn/tools_and_testing/client-side_javascript_frameworks/angular_todo_list_beginning/index.html new file mode 100644 index 0000000000..2438db1321 --- /dev/null +++ b/files/ru/learn/tools_and_testing/client-side_javascript_frameworks/angular_todo_list_beginning/index.html @@ -0,0 +1,270 @@ +--- +title: Начинаем приложение списка дел с использованием Angular +slug: Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_todo_list_beginning +original_slug: Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_todo_list_beginning +translation_of: Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_getting_started +tags: + - Новички + - Фреймворки + - JavaScript + - Изучение + - client-side + - Angular + - Компоненты + - Структура +--- +<div>{{LearnSidebar}}</div> + +<div>{{PreviousMenuNext("Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_getting_started","Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_styling", "Learn/Tools_and_testing/Client-side_JavaScript_frameworks")}}</div> + +<p>Сейчас мы готовы приступить к созданию приложения списка дел с использованием Angular. Готовое приложение будет отображать список дел, позволять редактировать, удалять и добавлять элементы. В этой статье вы познакомитесь со структурой приложения и поработаете над базовым отображением списка дел. </p> + +<table> + <tbody> + <tr> + <th scope="row">Необходимые условия:</th> + <td>Понимание основ <a href="/en-US/docs/Learn/HTML">HTML</a>, <a href="/en-US/docs/Learn/CSS">CSS</a>, и <a href="/en-US/docs/Learn/JavaScript">JavaScript</a>, знание <a href="/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line">терминала/командной строки</a>. + </td> + </tr> + <th scope="row">Цель:</th> + <td>Создать базовую структуру приложения, сделать так, чтобы оно отображало список дел, и понять фундаментальные концепции Angular: структуру компонентов, совместное использование данных между компонентами и использование циклов вывода данных. </td> + </tr> + </tbody> +</table> + +<h2 id="the_to_do_application_structure">Структура приложения списка дел</h2> + +<p>Как и в приложении без фреймворка, в Angular-приложении есть <code>index.html</code>. +Тэг <code><body></code> в <code>index.html</code>, содержит специальный Angular-элемент — <code><app-root></code> — для вставки вашего основного компонента, который включает в себя другие компоненты, которые вы создаете. +Обычно, вам не нужно работать с <code>index.html</code>, вместо этого сфокусируйтесь на работе со специальными элементами вашего приложения — компонентами.</p> + +<h3 id="organize_your_application_with_components">Организация приложения с помощью компонентов</h3> + +<p>Компоненты — это основной структурный элемент Angular-приложений. Приложение со списком дел состоит из двух компонентов — компонента-основы для вашего приложения и компонента для обработки элементов списка дел. </p> + +<p>Каждый компонент состоит из класса TypeScript, HTML и CSS. TypeScript транспилируется в JavaScript — это означает, что ваше приложение в конечном итоге преобразуется в JavaScript, но вы можете использовать расширенные функции Typescript и оптимизированный синтаксис.</p> + +<h3 id="dynamically_change_the_ui_with_ngif_and_ngfor">Динамическое изменение UI с помощью *ngIf и *ngFor</h3> + +<p>В этом руководстве также рассматриваются две важные директивы Angular для динамического изменения структуры DOM. Директива похожа на команду, которую вы можете использовать в своем HTML, чтобы повлиять на изменения в вашем приложении.</p> + +<p>Первая директива, рассматриваемая в этом руководстве — это Angular-итератор, <code>*ngFor</code>. +<code>*ngFor</code> дает возможность динамически создавать DOM-элементы на основе элементов массива.</p> + +<p>Вторая директива, которую вы изучите в этом руководстве — это <code>*ngIf</code>. +Вы можете использовать <code>*ngIf</code> для добавления или удаления элементов из DOM в зависимости от условия. +Например, если пользователи хотят отредактировать элемент в списке дел, вы можете предоставить им средства для редактирования этого элемента. +Если они не хотят редактировать элемент, вы можете удалить элементы для редактирования. </p> + +<h3 id="share_data_between_components">Обмен данными между компонентами</h3> + +<p>В этом приложении вы работаете с обменом данными между компонентами. Чтобы добавить новый элемент в список дел, главный компонент должен отправить новый элемент второму компоненту. Этот второй компонент управляет элементами и заботится о редактировании, отметке выполненных и удалении элементов.</p> + +<p>Обмен данными между Angular-компонентами происходит с помощью специальных декораторов, называемых <code>@Input()</code> и <code>@Output()</code>. +Эти декораторы указывают, что определенные свойства могут получать или отправлять данные. Использование <code>@Output()</code> означает, что вы вызываете событие в одном компоненте, чтобы оповестить другой компонент об изменении данных.</p> + +<h2 id="define_item-">Определение элемента</h2> + +<p>В директории <code>app</code>, создайте новый файл и назовите его <code>item.ts</code>, затем поместите туда следующее:</p> + +<pre class="brush: js">export interface Item { + description: string; + done: boolean; +}</pre> + +<p><code>Item</code> как <code>interface</code> описывает <code>item</code> как объект, чтобы приложение могло понимать, что такое <code>item</code> и как с ним взаимодействовать. +Для нашего списка дел,<code>item</code> это объект у которого есть описание (description) и он может быть выполнен (done).</p> + +<h2 id="add_logic_to_appcomponent-">Добавление логики в AppComponent</h2> + +<p>Теперь, когда выше приложение знает, что такое <code>item</code>, вы можете добавить несколько элементов в <code>app.component.ts</code>. +В <code>app.component.ts</code> замените содержимое на:</p> + +<pre class="brush: js"> +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'] +}) + +export class AppComponent { + title = 'todo'; + + filter: 'all' | 'active' | 'done' = 'all'; + + allItems = [ + { description: 'eat', done: true }, + { description: 'sleep', done: false }, + { description: 'play', done: false }, + { description: 'laugh', done: false }, + ]; + + get items() { + if (this.filter === 'all') { + return this.allItems; + } + return this.allItems.filter(item => this.filter === 'done' ? item.done : !item.done); + } + +}</pre> + +<p>Первая строка — это импорт JavaScript, который импортирует Angular . +<code>@Component()</code> декоратор описывает метаданные <code>AppComponent</code>. +Свойства метаданных по умолчанию следующие:</p> + +<ul> + <li><code>selector</code>: Сообщает имя селектора CSS, который используется в шаблоне для создания экземпляра этого компонента. Тут это <code>'app-root'</code>. +В <code>index.html</code> внутри тэга <code>body</code>, Angular CLI добавляет <code><app-root></app-root></code> когда генерирует приложение. +Вы можете использовать селекторы компонентов точно так же, добавляя их к другим HTML-шаблонам компонентов.</li> + <li><code>templateUrl</code>: Задает HTML-файл, который нужно связать с этим компонентом. . +Тут это './app.component.html',</li> + <li><code>styleUrls</code>: Предоставляет расположение и имя файла для стилей, которые применяются конкретно к этому компоненту. Тут это <code>'./app.component.css'</code>.</li> +</ul> + +<p>Свойство <code>filter</code> имеет тип <code>union</code>, это значит, что <code>filter</code> может принимать значения: <code>all</code>, <code>active</code> или <code>done</code>. +С типом <code>union</code>, если вы опечатаетесь в значении, которое присваиваете свойству <code>filter</code>, TypeScript сообщит об этом, чтобы вы могли вовремя отловить ошибку. +В этом руководстве показано, как добавить фильтрацию на более позднем этапе, но вы также можете использовать фильтр, чтобы отобразить список всех элементов по умолчанию.</p> + +<p>Массив <code>allItems</code> содержит текущие дела, в том числе и выполненные (<code>done</code>). +Первый элемент, <code>eat</code>, имеет значение свойства <code>done: true</code>.</p> + +<p>Геттер, <code>get items()</code>, извлекает все элементы из массива <code>allItems</code> если <code>filter</code> имеет значение <code>all</code>. +Иначе, <code>get items()</code> возвращает завершенные (<code>done: true</code>) или незавершенные (<code>done: false</code>) элементы в зависимости от того, как пользователь фильтрует представление. +Геттер так же устанавливает <code>items</code> как имя массива, которое вы будете использовать в следующем блоке.</p> + +<h2 id="add_html_to_the_appcomponent_template">Добавление HTML-шаблона для AppComponent</h2> + +<p>Чтобы увидеть список элементов в браузере, замените содержимое <code>app.component.html</code> на следующий HTML:</p> + +<pre class="brush: html"><div class="main"> + <h1>My To Do List</h1> + <h2>What would you like to do today?</h2> + + <ul> + <li *ngFor="let item of items">\{{item.description}}</li> + </ul> +</div></pre> + +<p>Тэг <code><li></code> содержит <code>*ngFor</code> — встроенную директива Angular, которая перебирает элементы в массиве <code>items</code>. +Для каждого элемента, <code>*ngFor</code> создает новый тэг <code><li></code>. +Двойные фигурные скобки, которые содержат <code>item.description</code> сообщают Angular, что нужно заполнить каждый тэг <code><li></code> текстом из item's description.</p> + +<p>В браузере вы должны увидеть список элементов:</p> + +<pre> +My To Do List +What would you like to do today? + +* eat +* sleep +* play +* laugh +</pre> + +<h2 id="add_items_to_the_list">Добавление элементов в список</h2> + +<p>С список дел нужно добавлять элементы.</p> + +<p>Добавьте в <code>app.component.ts</code>, следующий метод класса:</p> + +<pre class="brush: js">addItem(description: string) { + this.allItems.unshift({ + description, + done: false + }); +}</pre> + +<p>Метод <code>addItem()</code> принимает элемент, который предоставляет пользователь, и добавляет его в массив, когда пользователь нажимает кнопку <strong>Add</strong>.<code>addItem()</code> использует метод массива <code>unshift()</code> чтобы добавить новый элемент в начало массива и, соответственно, начало списка. +Вы можете использовать метод <code>push()</code>, который добавит новый элемент в конец массива и, соответственно, конец списка.</p> + +<p>Для того, чтобы использовать метод <code>addItem()</code>, отредактируйте HTML в шаблоне <code>AppComponent</code>.</p> + +<p>В <code>app.component.html</code>, замените <code><h2></code> на следующее:</p> + +<pre class="brush: js"><label for="addItemInput">What would you like to do today?</label> + +<input + #newItem + placeholder="add an item" + (keyup.enter)="addItem(newItem.value); newItem.value = ''" + class="lg-text-input" + id="addItemInput" +/> + +<button class="btn-primary" (click)="addItem(newItem.value)">Add</button></pre> + +<p>Когда пользователь вводит новый элемент в <code><input></code> и нажимает <strong>Enter</strong>, метод <code>addItem()</code> добавляет значение в массив <code>items</code>. +Нажатие <strong>Enter</strong> так же сбрасывает значение в <code><input></code> на пустую строку. +В качестве альтернативы пользователь может щелкнуть на кнопке <strong>Add</strong>, которая так же вызовет метод <code>addItem()</code>.</p> + + +<h2 id="summary">Резюме</h2> + +<p>Сейчас у вас должен быть список дел, отображаемый в вашем браузере. Это большой прогресс! Конечно, нам предстоит еще многое сделать. В следующей статье мы рассмотрим добавление стилей в наше приложение.</p> + +<div>{{PreviousMenuNext("Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_getting_started","Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_styling", "Learn/Tools_and_testing/Client-side_JavaScript_frameworks")}}</div> + +<h2 id="In_this_module">В это модуле</h2> + +<ul> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Introduction">Введение в клиентские фреймворки</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Main_features">Основные функции фреймворков</a></li> + <li>React + <ul> + <li><a href="/ru/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_getting_started">Начало работы с React</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_todo_list_beginning">Начало создания приложения списка дел с React</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_components">Компоненты React приложения</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_interactivity_events_state">Интерактивность React: события и состояние</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_interactivity_filtering_conditional_rendering">Интерактивность React: редактирование, фильтрация, условная отрисовка</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_accessibility">Доступность в React</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_resources">Ресурсы по React</a></li> + </ul> + </li> + <li>Ember + <ul> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_getting_started">Начало работы с Ember</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_structure_componentization">Структура Ember приложения и компоненты</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_interactivity_events_state">Интерактивность Ember: события, классы и состояние</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_conditional_footer">Интерактивность Ember: функциональность подвала, условная отрисовка</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_routing">Маршрутизация в Ember</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_resources">Ресурсы по Ember и устранение неполадок</a></li> + </ul> + </li> + <li>Vue + <ul> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_getting_started">Начало работы с Vue</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_first_component">Создание вашего первого компонента Vue</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_rendering_lists">Отрисовка списка Vue компонентов</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_methods_events_models">Добавление новой формы во Vue: события, методы, и модели</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_styling">Стилизация Vue компонентов с CSS</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_computed_properties">Использование вычисляемых свойств во Vue</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_conditional_rendering">Условная отрисовка во Vue: Редактирование существующих дел</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_refs_focus_management">Управление фокусом во Vue с помощью refs</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_resources">Ресурсы по Vue</a></li> + </ul> + </li> + <li>Svelte + <ul> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_getting_started">Начало работы со Svelte</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_Todo_list_beginning">Начинаем приложение списка дел c использованием Svelte</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_variables_props">Динамическое поведение в Svelte: работа с переменными и пропсами</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_components">Компоненты Svelte приложения</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_reactivity_lifecycle_accessibility">Продвинутый Svelte: реактивность, жизненный цикл, доступность</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_stores">Работа хранилищами в Svelte</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_TypeScript">Поддержка TypeScript в Svelte</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_deployment_next">Развертывание и следующие шаги</a></li> + </ul> + </li> + <li>Angular + <ul> + <li><a href="/ru/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_getting_started">Начало работы с Angular</a></li> + <li><a href="/ru/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_todo_list_beginning">Начинаем приложение списка дел с использованием Angular</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_styling">Стилизация Angular приложения</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_item_component">Создание компонента элемента (item component)</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_filtering">Фильтрация списка дел</a></li> + <li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_building">Сборка Angular приложений и другие ресурсы</a></li> + </ul> + </li> +</ul> |