Я пытаюсь получить входной текст из html-ввода, который должен быть сообщением в чате. Затем я хочу добавить этот текст в историю чата ниже.
Мой (обновленный!) Код до сих пор:
defmodule ChatWeb.ChatLive do
use ChatWeb, :live_view
def mount(params, session, socket) do
{:ok, assign(socket, :text_value, "")}
end
def render(assigns) do
~H"""
<h1>Chat</h1>
<form phx-submit = "submit">
<label>Your Text:<input id = "msg" type = "text" name = "input_value" /></label>
<button>Send</button>
</form>
<div id = "chat">
Chat history: <%= @text_value %>
</div>
"""
end
def handle_event("send-msg", %{"input_value" => msg}, socket) do
{:noreply, assign(socket, :text_value, msg)}
end
end
Вот как это выглядит до сих пор:
@AlekseiMatiushkin Мне нужно получить значение, которое вводится во ввод html, и объединить его с переменной text_value. Мне не хватает общего понимания того, как это сделать. В обновленном фрагменте кода выше проблема заключается в том, что текст не добавляется к text_value.
assign(socket, :text_value, msg <> socket.assigns.text_value) должен сделать.





У вас есть эта функция handle_event:
def handle_event("send-msg", %{"input_value" => msg}, socket) do
{:noreply, assign(socket, :text_value, msg)}
end
... но не похоже, что "send-msg" привязан к чему-либо. Вот дополнительная информация о привязках в LiveView, включая пример кода: https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#module-bindings
Похоже, ваша кнопка «Отправить» в настоящее время привязана к событию "submit" с помощью этого кода:
<form phx-submit = "submit">
Если вы просто измените "send-msg"def handle_event("send-msg"... на "submit", все будет работать нормально, и text_value будет назначено значение поля ввода, как и ожидалось.
С помощью ваших ответов и комментариев (Спасибо!) Я смог решить это следующим образом:
defmodule ChatWeb.ChatLive сделать использовать ChatWeb, :live_view
def mount(params, session, socket) do {:ok, assign(socket, :text_value, "")} end def render(assigns) do ~H""" <h1>Chat</h1> <form phx-submit = "submit"> <label>Your Name:<input id = "client" type = "text" name = "client" /></label> <label>Your Text:<input id = "msg" type = "text" name = "input_value" /></label> <input type = "submit" /> </form> <div id = "chat"> Chat history: <%= @text_value %> </div> """ end def handle_event("submit", %{"input_value" => msg, "client" => client}, socket) do {:noreply, assign(socket, :text_value, "| Message by " <> client <> ": '" <> msg <> "' " <> socket.assigns.text_value)} end end
если мой ответ помог вам, не могли бы вы проголосовать за него / отметить его как принятый?
Какая у вас проблема? Что не работает?