Я пытаюсь создать нормальное CRUD-приложение с использованием Phoenix.LiveView. Здесь я сталкиваюсь с проблемой при передаче или установке значения ASSIGN или IN SOCKET.
У меня есть код LiveView
Index.ex
defmodule Example.Index do
use Phoenix.LiveView
@default_state %{
is_editing?: false,
user_id: nil,
}
def render(assign) do
ExampleWeb.render("index.html", assign)
end
def mount(_params, _session, socket) do
users = Example.get_users()
{:ok, assign(socket, %{@default_state | users: users})}
end
def handle_event("edit-user", %{"user-id" => user_id}, socket) do
new_socket =
socket
|> assign(:user_id, user_id)
{:noreply,
live_redirect(new_socket,
to: ExampleWeb.Router.Helpers.users_edit_path(new_socket, __MODULE__, user_id),
replace: false
)}
end
end
Файл шаблона
<div class="card">
<%= if @is_editing? do %>
<%= live_component(@socket, ExampleWeb.Users.EditFormComponent, id: :edit_user) %>
<%= end %>
<%= if @is_editing? != true do %>
<div class="card-header">
<strong>Users</strong>
<a class="btn btn-sm btn-success ml-3 pull-right" phx-click="new">
<i class="fa fa-plus mr-1"></i> Create
</a>
</div>
<%= end %>
</div
вот мой код component.ex
defmodule ExampleWeb.Users.EditFormComponent do
use Phoenix.LiveComponent
def render(assigns) do
UserView.render("update.html", assigns)
end
def mount(socket) do
{:ok, assign(socket, changeset: User.changeset(%User{}))}
end
end
проблема здесь я не могу получить идентификатор пользователя, который установлен / обновлен в файле LiveView, а также не может получить доступ к PARAMS на уровне компонентов.
Может кто-нибудь предложить или предложить решение для этого ??