获取LiveView中的当前路径

Bar*_*n23 8 elixir phoenix-framework phoenix-live-view

在正常路线中:

get /index, MyController, :index

Plug.Conn我可以简单地从的 path_info 函数获取路线。

但是,如果我有实时路线,如何检索当前路径?

live /index, IndexLive

小智 5

您可以使用handle_params 回调获取当前 uri ,该回调在挂载之后和渲​​染之前调用。

  • 在`*Web.*Live`模块中,定义`def handle_params(_unsigned_pa​​rams, uri, socket), do: {:noreply, allocate(socket, uri: URI.parse(uri))}`,然后就可以使用`@ uri.path`。 (4认同)

gco*_*rci 5

对于那些几年后找到这里的人来说,一切都已经取得了长足的进步。如果您发现自己需要所有视图中的当前路径(可能是全局导航元素),您会失去理智尝试将其放在所有视图上。

制作这样的模块:

defmodule MyAppWeb.SaveRequestUri do
  def on_mount(:save_request_uri, _params, _session, socket), do:
    {:cont, Phoenix.LiveView.attach_hook(socket, :save_request_path, :handle_params, &save_request_path/3)}

  defp save_request_path(_params, url, socket), do:
    {:cont, Phoenix.Component.assign(socket, :current_uri, URI.parse(url))}
end
Run Code Online (Sandbox Code Playgroud)

然后将其放入您的 live_session 中:

  live_session :some_session_name, on_mount: [{MyAppWeb.SaveRequestUri, :save_request_uri}] do
    scope "/", MyAppWeb do
      # Your routes
    end
  end
Run Code Online (Sandbox Code Playgroud)

将导致所有人都可以在分配中使用live_views@request_uri

注意: phoenix 不会自动为您公开这一点的原因是因为对于某些应用程序来说,请求路径可能非常大;始终在所有套接字中使用此功能可能会很昂贵。就像所有事情一样,这是一场权衡游戏……希望这会有所帮助!