Задать вопрос
Lisey
@Lisey

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

Здравствуйте! В общем, у меня идея такая: есть компонент Message с версткой и функциями одного сообщения, то есть одного конкретного сообщения внутри чата, и когда возникает определенное событие, в Message передается время и текст с сервера, и он добавляется в другом компоненте родителе.

Пробовал вот так, но не вышло:
import chatMessage from "./chat-message.vue"
...
mounted: function() {
 let thisComponents = this
 socket.on("message", data) {
   thisComponents.$el.appendChild("<chat-message messageText="data.messageText", messageTime="data.messageTime"></chat-message>")
  }
}, 
components: {
         chatMessage
}


chatMessage:
<template>
   <div class="chat-message">
      {{messageText}} <br>
      {{messageTime}}
   </div>
</template>

<script>
   export default {
      name: "chat-message",
      props: ["messageText", "messageTime"]
   }
</script>

Было еще пару идей, но суть в том, что что-то получается неудобно, или просто не работает. Есть идеи, как можно такое реализовать, или стоит придумать какую-то другую структуру? Заранее спасибо)
  • Вопрос задан
  • 94 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 2
Ni55aN
@Ni55aN
<chat-message ...> должен быть прописан в шаблоне текущего компонента с v-for директивой, а по событию нужно добавлять данные в массив в состоянии. Прямая работа с DOM не приветствуется, тем более здесь она вообще не в тему. Смотрите документацию по Vue.js
Ответ написан
@VegasChickiChicki
Я не такой эксперт во Vue, но тут вообще что-то явно не так, смысл Vue - работа с данными, а не с DOM. Вам нужно показывать ваше сообщение(компонент) по условию, а вы просто рисуете его в DOM. Его нужно вставлять как компонент в ваш шаблон и уже в него передавать данные, а данные обновлять с вашего сокета(с этим не работал, тут не помогу).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы