如何在Phoenix中创建LiveView?附失效代码求助
问题排查与修复方案
1. 模板语法版本不兼容
你的代码里使用的~L模板标记是Phoenix LiveView v0.17版本之前的旧语法,新版LiveView已统一改用~H(HEEx模板)替代。如果当前环境是新版LiveView,这个语法会直接导致运行失败。
修复方法:将~L替换为~H,同时修正模板中的引号转义(原代码的"是HTML转义格式,直接使用双引号即可):
defmodule ProjectWeb.CounterLive do use Phoenix.LiveView def mount(_session, socket) do socket = assign(socket, :count, 0) {:ok, socket} end def render(assigns) do ~H""" <h1>Count: <%= @count %></h1> """ end end
2. 依赖版本不一致
前后两台电脑的Phoenix/LiveView依赖版本差异可能引发问题:
- 检查
mix.exs文件中phoenix_live_view的版本号,尽量与之前能正常运行的环境保持一致,或升级到当前环境兼容的版本 - 执行
mix deps.get重新拉取依赖,确保依赖安装完整且版本匹配
3. 路由配置缺失
若之前的电脑配置了LiveView路由,而当前项目未配置,也会导致无法访问:
确保在lib/project_web/router.ex中添加对应路由:
scope "/", ProjectWeb do pipe_through :browser live "/counter", CounterLive end
4. 前端资源未正确编译
新版LiveView需要前端引入对应JS模块,需确认:
assets/js/app.js中已导入LiveView相关代码:
import "phoenix_live_view" let liveSocket = new LiveSocket("/live", Socket, {params: {_csrf_token: csrfToken}}) liveSocket.connect()
- 执行
mix assets.deploy或npm run dev重新编译前端资源
内容的提问来源于stack exchange,提问作者Snek
相关产品推荐
相关产品推荐

