Сделать отображение / скрытие элемента внутри li на mouseenter / mouseleave в Angular 5

Итак, у меня есть базовый <ul> в Angular 5, содержащий * ngFor, который заполняет своих потомков <li> на основе массива. Ничего особенного. Теперь я хочу, чтобы при наведении курсора на каждый ли становились видимыми карандаш и значок корзины. До сих пор мне удавалось отображать значки карандаша и корзины все одновременно, но это не то поведение, которое я ищу. Я хочу, чтобы пользователь мог видеть, что для каждого конкретного li.

Это мой код, адаптированный после этого Plunk: https://embed.plnkr.co/xgI5jOPI9HDUJb71RfmT/.

<ul class = "list-group">
  <li class = "list-group-item" (dblclick) = "editTodo(todo)" *ngFor = "let todo of todosList">
     <span (mouseenter) = "mouseOvered=true" (mouseleave) = "mouseOvered=false">
       {{todo.text}}
       <i [className] = "mouseOvered ? 'fa fa-pencil' : 'hidden'" (click) = "editTodo(todo)"></i>
       <i [className] = "mouseOvered ? 'fa fa-trash' : 'hidden'" (click) = "deleteTodo(todo)"></i>
     </span>
  </li>
</ul>

Изменить на основе предложения Сакшама:

Я добавил 2 метода, mouseEnter (todo) и mouseLeave (todo), и внутри них я назначил свойство mouseOvered конкретному наведенному на него todo. Итак, мой код выглядит так:

app.component.html

...
<span (mouseenter) = "mouseEnter(todo)" (mouseleave) = "mouseLeave(todo)">
   {{todo.text}}
   <i [className] = "todo.mouseOvered ? 'fa fa-pencil' : 'hidden'" (click) = "editTodo(todo)"></i>
   <i [className] = "todo.mouseOvered ? 'fa fa-trash' : 'hidden'" (click) = "deleteTodo(todo)"></i>
</span>

app.component.ts

mouseEnter(todo) {
   todo.mouseOvered = true;
}
mouseLeave(todo) {
   todo.mouseOvered = false;
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что вы можете сделать, так это добавить новое свойство мышь к каждому объекту в todosList и инициализировать его с помощью false.

Затем все, что вам нужно сделать, это:

<ul class = "list-group">
<li class = "list-group-item" (dblclick) = "editTodo(todo)" *ngFor = "let todo of todosList">
 <span (mouseenter) = "todo.mouseOvered=true" (mouseleave) = "todo.mouseOvered=false">
   {{todo.text}}
   <i [className] = "todo.mouseOvered ? 'fa fa-pencil' : 'hidden'" (click) = "editTodo(todo)"></i>
   <i [className] = "todo.mouseOvered ? 'fa fa-trash' : 'hidden'" (click) = "deleteTodo(todo)"></i>
 </span>
</li>
</ul>

Не уверен, что это лучший подход, но он сработает.

Спасибо за ответ Сакшам. На самом деле я не могу создать экземпляр объекта todo с помощью свойства mouseOvered, но ваше предложение дало мне другую идею. Я отредактирую свой вопрос, используя полученный код.

Iulia Mihet 07.06.2018 13:15

Другие вопросы по теме