Угловой: атрибут SVG по событию

#angular #svg

Вопрос:

Как я могу получить доступ к атрибуту (например, заливке) объекта SVG через угловое событие (например, mouseenter)?

Я попробовал эти варианты, но безуспешно.

 lt;rect #rrr [attr.fill]="'green'" (mouseenter)="rrr.fill='red'/gt;  lt;rect #rrr [attr.fill]="'green'" (mouseenter)="rrr.attr.fill='red'/gt;  lt;rect #rrr [attr.fill]="'green'" (mouseenter)="rrr.attributes.fill='red'/gt;  

Я хочу сделать это напрямую — поэтому я использую #rrr. Отправка его через переменную компонента работает хорошо, но не то, что я хочу.

 lt;rect [attr.fill]="myvar == true ? 'red' : 'green'" (mouseenter)="myvar = true"/gt;  

Ответ №1:

Вы можете использовать любой из этих вариантов:

 #rrr (mouseenter)="rrr.setAttribute('fill', 'red')"  #rrr (mouseenter)="rrr.style.fill = 'red'"  

Ответ №2:

Попробуйте использовать класс для достижения этой цели:

 lt;rect [ngClass] = "{'red': myvar==true, 'green': myvar!=true}"/gt;  

На вашем css:

 .gren {  fill:green; } .red{  fill: red; }  

Комментарии:

1. ОП заявил, что они не хотят использовать компонентную переменную, такую как myvar .

2. С помощью этого метода вы могли бы сделать свой html-шаблон более чистым.

3. 1. Фактически да, это может быть, но требование OPs не совпадает с ответом. 2. Это может быть более чистым, используя тернарный оператор: [ngClass]="myvar ? 'red' : 'green'" .

4. Для меня это выглядит более чистым :).