В первой части этой серии руководств по Angular вы увидели, как начать создавать менеджер списков покупок с помощью Angular. Вы узнали, как создать представление для компонента «Бакалея», добавлять элементы в список «Бакалея» и отображать добавленные элементы.
В этой части вы реализуете функции для маркировки завершенных элементов, редактирования существующих и удаления добавленных элементов.
Начиная
Давайте начнем с клонирования исходного кода из первой части урока. С вашего терминала напишите следующий код для клонирования исходного кода:
|
1
|
git clone https://github.com/royagasthyan/AngularGrocery
|
После того, как исходный код был клонирован, перейдите в папку проекта и установите необходимые зависимости.
|
1
2
|
cd AngularGrocery
npm install
|
После установки зависимостей вы сможете запустить сервер. В папке проекта введите следующие команды:
|
1
|
ng serve
|
Укажите в браузере http: // localhost: 4200 /, и приложение должно быть запущено.
Обновление продуктовых предметов
Как только вы добавили в список продуктовые товары, вы сможете редактировать и обновлять их. Давайте предоставим кнопку редактирования в сетке списков, которая, при нажатии, позволит редактировать существующие элементы.
Измените код app.grocery.html чтобы включить кнопку редактирования в сетке.
|
1
|
<span class=»glyphicon glyphicon-pencil floatright»>
|
Сохраните вышеуказанные изменения и перезагрузите сервер. Загрузите страницу и введите несколько элементов, и у вас будет кнопка редактирования для каждого элемента.

Когда пользователь нажимает кнопку редактирования, необходимо добавить метод щелчка для обработки редактирования элемента. Измените app.grocery.html чтобы добавить событие нажатия для редактирования элемента.
|
1
|
<span (click)=»onEdit(task)» class=»glyphicon glyphicon-pencil floatright»>
|
Передайте task методу onEdit как показано в приведенном выше коде, чтобы определить элемент, подлежащий редактированию.
Внутри класса GroceryComponent инициализируйте переменную области действия task как показано:
|
1
2
3
4
|
task = {
name: »,
id: 0
};
|
В методе onClick вы проверите id чтобы увидеть, является ли он существующим элементом или новым элементом. Измените метод onClick как показано:
|
1
2
3
|
if(this.task.id == 0){
this.tasks.push({id: (new Date()).getTime(),name: this.task.name});
}
|
Как видно, вы назначили уникальную метку времени в качестве id для каждой задачи Теперь давайте определим метод onEdit для редактирования существующего элемента. Внутри метода onEdit присвойте переданный item переменной task .
|
1
2
3
|
onEdit(item){
this.task = item;
}
|
Сохраните изменения и перезапустите сервер. Введите новый элемент в список покупок и нажмите соответствующую кнопку редактирования. Вы сможете редактировать и обновлять запись, нажав кнопку OK .

Удаление продуктов
Давайте добавим значок удаления, чтобы удалить существующие элементы. Обновите файл app.grocery.html чтобы изменить код HTML, как показано ниже:
|
1
|
<span class=»glyphicon glyphicon-remove floatright paddingLeft»>
|
Вот как выглядит полный файл app.grocery.html :
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<div>
<h2> Grocery list manager </h2>
<div class=»row»>
<div class=»col-xs-6 col-md-4″>
<div class=»input-group»>
<input type=»text» class=»form-control» placeholder=»enter grocery items» [(ngModel)]=»task.name» />
<div class=»input-group-btn»>
<button class=»btn btn-primary» type=»button» (click)=»onClick()»>
<span class=»glyphicon glyphicon-ok»>
</button
>
</div>
</div>
<ul class=»list-group»>
<li *ngFor=»let task of tasks» class=»list-group-item»>
<span> {{ task.name }}
<span class=»glyphicon glyphicon-remove floatright paddingLeft»>
<span (click)=»onEdit(task)» class=»glyphicon glyphicon-pencil floatright»>
</li>
</ul>
</div>
</div>
</div>
|
Добавьте событие нажатия на значок удаления, чтобы удалить продуктовый элемент.
|
1
|
<span (click)=»onDelete(task)» class=»glyphicon glyphicon-remove floatright paddingLeft»>
|
Сохраните изменения и перезапустите сервер. Попробуйте добавить новые элементы в приложение бакалейного менеджера, и вы увидите список элементов вместе со значками удаления и редактирования.

Для реализации функции удаления необходимо добавить метод app.grocery.ts файл app.grocery.ts как показано ниже:
|
1
2
3
|
onDelete(item){
// Delete functionality will be here
}
|
После того, как пользователь щелкнет значок удаления, необходимо сравнить id элемента со списком продуктовых элементов и удалить запись из списка tasks . Вот как onDelete метод onDelete :
|
1
2
3
4
5
6
7
8
|
onDelete(item){
for(var i = 0;i < this.tasks.length; i++){
if(item.id == this.tasks[i].id){
this.tasks.splice(i,1);
break;
}
}
}
|
Как видно из приведенного выше кода, вы перебрали список tasks и проверили его по id элемента, по id щелкнули. Если он соответствует элементу в списке tasks , он удаляется методом splice .
Сохраните вышеуказанные изменения и перезагрузите сервер. Добавьте несколько предметов в менеджер списка покупок. Он будет добавлен с иконками удаления и редактирования в сетку списка задач. Попробуйте нажать на значок удаления, и элемент будет удален из списка элементов.
Маркировка продуктового товара как выполненного
Давайте добавим функциональность, чтобы вычеркнуть элементы, добавленные в список. Когда пользователь выполнит задачи в менеджере списка покупок, появится возможность вычеркнуть выполненные задачи. Чтобы отслеживать новые и выполненные задачи, добавьте новую переменную strike в информацию о задаче.
Измените метод onClick чтобы включить новую переменную strike как показано ниже:
|
01
02
03
04
05
06
07
08
09
10
|
onClick(){
if(this.task.id == 0){
this.tasks.push({id: (new Date()).getTime(),name: this.task.name, strike: false});
}
this.task = {
name: »,
id: 0
};
}
|
Добавьте новый класс strike в файл src/style.css который src/style.css элемент.
|
1
2
3
|
.strike{
text-decoration:line-through;
}
|
Включите событие нажатия на элемент, чтобы переключить переменную strike переменной items. Вы будете применять класс strike к предметам на основе логического значения переменной strike . По умолчанию это будет false. Вот метод onStrike для переключения значения переменных удара:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
onStrike(item){
for(var i = 0;i < this.tasks.length; i++){
if(item.id == this.tasks[i].id){
if(this.tasks[i].strike){
this.tasks[i].strike = false;
}
else{
this.tasks[i].strike = true;
}
break;
}
}
}
|
Как видно из приведенного выше метода, вы перебираете список элементов. Как только предмет найден, вы переключаете значение удара.
Основываясь на переменной strike , вам нужно применить класс strike к диапазону имен задач. Вот как это выглядит:
|
1
|
<span (click)=»onStrike(task)» [ngClass]=»{‘strike’: task.strike}»> {{ task.name }}
|
Как видно, вы использовали директиву ngClass для применения strike класса к элементу span, если значение task.strike равно true .
Сохраните вышеуказанные изменения и перезагрузите сервер. Добавьте элементы в список и нажмите на добавленный элемент. После щелчка элемент будет вычеркнут, как и ожидалось.

Завершение
В этом руководстве вы увидели, как обновить, удалить и пометить задачу как выполненную в приложении управления продуктами с помощью Angular. Я надеюсь, вам понравился урок. Дайте мне знать ваши мысли в комментариях ниже.
JavaScript стал одним из де-факто языков работы в сети. Это не без кривых обучения, и есть множество фреймворков и библиотек, которые также могут вас занять. Если вы ищете дополнительные ресурсы для обучения или использования в своей работе, посмотрите, что у нас есть на рынке Envato .
О, и не забывайте, что исходный код из этого урока доступен на GitHub .