применить жирный текст к части строки Angular

#javascript #html #angular #ngx-translate

#javascript #HTML #angular #ngx-перевести

Вопрос:

Я хотел бы выделить часть моего текста жирным шрифтом.

Я получаю текст из определенного файла.

"INFORMATION": "Here's an example of text",

Я бы хотел, чтобы это Here's an было выделено жирным шрифтом.

"INFORMATION": "<b>Here's an</b> example of text",

"INFORMATION": "<strong>Here's an</strong> example of text"

Затем я печатаю это

 <span translate>INFORMATION</span>
  

Вместо получения

Вот пример текста

Я получаю

 <b>Here's an</b> example of text
  

или

 <strong>Here's an</strong> example of text
  

Обновить

Я пытаюсь использовать innerHTML

 <span [innerHTML]="information | translate"></span>
  

Информация — это переменная, содержащая текст

но он игнорирует мои html-теги, он печатает только текст

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

1. Где находится код, в котором вы пытаетесь отобразить текст? Похоже, вы просто передаете строку, а не html.

2. "INFORMATION": "<b>Here an</b> example of text", Вот мой код, содержащий текст. Затем я печатаю его внутри <span>

3. это translate ваш собственный класс или вы использовали фреймворк / библиотеку?

4. Я использую ngx-translate

Ответ №1:

Что я бы сделал, так это канал, который очищает строку, которую вы ему даете, и использует регулярное выражение, чтобы сделать его более универсальным. Что-то вроде этого stackblitz :

https://stackblitz.com/edit/angular-tyz8b1?file=src/app/app.component.html

 import { Pipe, PipeTransform, Sanitizer, SecurityContext } from '@angular/core';

@Pipe({
  name: 'boldSpan'
})
export class BoldSpanPipe implements PipeTransform {

  constructor(
    private sanitizer: Sanitizer
  ) {}

  transform(value: string, regex): any {
    return this.sanitize(this.replace(value, regex));
  }

  replace(str, regex) {
    return str.replace(new RegExp(`(${regex})`, 'gi'), '<b>$1</b>');
  }

  sanitize(str) {
    return this.sanitizer.sanitize(SecurityContext.HTML, str);
  }
}
  

Таким образом, содержимое переменной фактически не изменяется, что означает, что ваши данные остаются нетронутыми.

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

1. Это должно быть отмечено как правильный ответ.

Ответ №2:

изменение ответа @user4676340, чтобы соответствовать строке, написанной следующим образом: «blabla * bold * blabla», чтобы вернуть «blabla bold blabla» — стиль WhatsApp

 import { Pipe, PipeTransform, Sanitizer, SecurityContext } from '@angular/core';
import { noop } from 'rxjs';

@Pipe({
  name: 'boldText'
})
export class BoldTextPipe implements PipeTransform {

  constructor(private sanitizer: Sanitizer) { }

  transform(value: string): any {
    const regex = /[*][wW]*[*]/gmi;
    return this.sanitize(this.replace(value, regex));
  }

  replace(str, regex) {
    let matched = str.match(regex);
    matched ? matched.forEach(foundString => {
      foundString = foundString.substring(1, foundString.length - 1);
      str = str.replace(regex, `<b>${foundString}</b>`);
    }) : noop;
    return str;
  }

  sanitize(str) {
    return this.sanitizer.sanitize(SecurityContext.HTML, str);
  }
}
  

(используя innerHTML в шаблоне компонента)

TS: text="blabla *bold* blabla"

HTML: <p [innerHTML]="text | boldText"></p>

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

1. как применить, если он находится в теге, подобном этому: <p>{{ data.text }}</p>

Ответ №3:

Вы можете сделать это с помощью angular-translate 2.0, если он у вас есть.

 <span translate="{{ 'INFORMATION' }}"></span> 
  

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

1. Это только для Angular 1.x ?

Ответ №4:

Я не знаю всего контекста задачи, но вот простое решение. Я надеюсь, этого достаточно. (Но мы имеем дело с «применить жирный текст к части строки Angular».) Изменение от @user4676340 и следующие правки хороши

// app.components.ts

 item = {"INFORMATION": "Here's an", "TEXT": " example of text"};
item3 = "Here's an";
item3_1 = " example of text";
  

// app.components.html

Вариант 1 :

 <p>
<b><span>{{item.INFORMATION}}</span></b>
<span>{{item.TEXT}}</span>
</p>
  

Вариант 2:

 <p>
<b><span [innerHTML]="item3"></span></b>
<span [innerHTML]="item3_1"></span>
</p>
  

Результат: Вот пример текста