Вы можете использовать что-то вроде ниже - где после рендеринга основного предложения вы можете заменить специальное слово элементом span и применить класс CSS, скажем .special
к этому тегу span.
import {Component, Input, ElementRef, AfterViewInit} из '@ angular / core';
@Component({
selector: 'my-component',
template: '<p>{{sentence}}</p>'
})
export class MyComponent implements AfterViewInit {
@Input() sentence: string;
@Input() specialWord: string;
constructor(private el: ElementRef) {
}
ngAfterViewInit() {
this.el.nativeElement.innerHTML = this.el.nativeElement.
innerHTML.replace(new RegExp(`${this.specialWord}`, 'g'),
`<span class="special">${this.specialWord}</span>`);
}
}
Чтобы сохранить ваш код обобщенным c, вы можете использовать дополнительные @Input()
для специального слова.
В styles.scss
вашего приложения вы можете определить CSS класс .special
.
.special {
font-weight: bold;
}
Если вам интересно, почему вы не можете использовать аналогичные логи c для замены содержимого из sentence
, как показано ниже:
this.sentence = this.sentence.replace(new RegExp(`${this.specialWord}`, 'g'),
`<span class="special">${this.specialWord}</span>`);
затем обратите внимание, что Angular будет экранировать теги HTML, и они будут отображаться как есть на выходе. Таким образом, вы увидите что-то подобное в браузере, вместо стилизованных интервалов.
Hello, it's a <span class="special">beautiful</span> day and I am in a very <span class="special">beautiful</span> city
Поэтому мне пришлось прибегнуть к манипулированию innerHTML
, чтобы замена выполнялась после того, как Angular отрендерил Приговор DOM.