Bar*_*n23 8 elixir phoenix-framework phoenix-live-view
在正常路线中:
get /index, MyController, :index
Plug.Conn
我可以简单地从的 path_info 函数获取路线。
但是,如果我有实时路线,如何检索当前路径?
live /index, IndexLive
小智 5
您可以使用handle_params 回调获取当前 uri ,该回调在挂载之后和渲染之前调用。
对于那些几年后找到这里的人来说,一切都已经取得了长足的进步。如果您发现自己需要所有视图中的当前路径(可能是全局导航元素),您会失去理智尝试将其放在所有视图上。
制作这样的模块:
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 不会自动为您公开这一点的原因是因为对于某些应用程序来说,请求路径可能非常大;始终在所有套接字中使用此功能可能会很昂贵。就像所有事情一样,这是一场权衡游戏……希望这会有所帮助!