@Isildur12

Как заменить имена пользователей на вёрстку при рендеринге элементов массива?

Как можно отрендерить список комментариев, только если в нём есть например пользователи с символом @ то чтобы их можно было отрендерить (хочу подсветить) в вёрстке вместо обычного текста?
Например, если обычные комментарии рендерятся как <div> lorem ipsum </div>, а если есть имя пользователя, то чтобы рендерились как

<div> lorem ipsum  <span>@name</span> set nomini </div>

Похожий функционал есть на гитхабе, например в обсуждениях.
Допустим, мой код в вью выглядит так:

<div
      v-for="item in comments"
      :key="item.id"
      class="comment-item"
   >
     ...
    <span class="comment-text"> {{ item.text }} </span>
  </div>
  • Вопрос задан
  • 116 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега Vue.js
.highlight {
  color: white;
  background: red;
}

methods: {
  highlightNames: str => str.replace(/(?<=^|\s)@\S+/g, '<span class="highlight">$&</span>'),
},

<div v-html="highlightNames(item.text)"></div>
Ответ написан
Aetae
@Aetae Куратор тега Vue.js
Тлен
<div
  v-for="item in splitComments"
  :key="item.id"
  class="comment-item"
>
  ...
  <span 
    class="comment-text" 
    v-for="(str, i) in item.textList" 
    :class="{highlight: i%2}"
  > 
      {{ str }} 
  </span>
</div>


computed: {
  splitComments() {
    return this.comments.map(item => ({
      ...item,
      textList: item.text.split(/(@\S+)/)
    }))
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы