Phoenix:根据路线显示/隐藏Html元素

Pau*_*iro 3 elixir phoenix-framework

如果我们不在主页上,我想显示菜单图标.我知道我需要使用这样的东西:

<div class="header">
   <%= if page_path(@conn) === "/" do %>
     #  Do nothing
   <% else %>
     <%= render Myproject.SharedView, "menuButton.html" %>
   <% end %>
</div>
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为page_path (@conn)它应该根据控制器动作给我们路由:page_path (@conn, :index)而不是浏览器请求的路由.所以我的问题是:做最简单的函数是什么?

Gaz*_*ler 6

您可以使用request_pathPlug.Conn:

<%= if @conn.request_path == "/" do %>
Run Code Online (Sandbox Code Playgroud)

如果要对整个控制器执行此操作,可以使用Phoenix.Controller.controller_module/1:

if Phoenix.Controller.controller_module(@conn) == MyApp.PageController do
Run Code Online (Sandbox Code Playgroud)

对于您的原始代码,如果您的意图是什么都不做,请使用unless:

<%= unless @conn.request_path == "/" do %>
Run Code Online (Sandbox Code Playgroud)

或颠倒你的逻辑:

<%= if @conn.request_path != "/" do %>
Run Code Online (Sandbox Code Playgroud)