使用 Phoenix LiveView 和原生 JS 钩子的交互式选择组件

这是一篇关于使用 Phoenix LiveView 和原生 JS Hook 构建选择输入组件的教程。

  • 介绍:介绍要学习构建的选择输入组件,其具有自定义选项渲染、自动完成、兼容 Phoenix 表单和键盘导航等功能,以创建新员工对象的简单表单为例,展示最终结果的 gif 图,将从新生成的 Phoenix LiveView 项目开始逐步构建组件,使用 Phoenix LiveView 1.7 和 TailwindCSS。
  • 项目设置:生成新的 Phoenix LiveView 项目mix phx.new phoenix_liveview_select,创建lib/phoenix_liveview_select/countries.ex文件并添加国家数据及相关函数,用于搜索和获取国家图片。
  • 构建创建员工表单:在lib/phoenix_liveview_select_web/live/employee_live/index.ex文件中创建包含文本字段和选择组件的简单表单,可通过mix phx.server启动 Phoenix 应用并访问表单。
  • LiveComponent:创建lib/phoenix_liveview_select_web/live/components/select.ex文件,定义选择组件,包含输入框、选择菜单等,可通过update/2函数更新组件的各种属性,将其添加到EmployeeLive.Index中并初始化选项列表,通过update_countries_options/2函数根据搜索查询过滤和准备选项列表。
  • JS Hook:用户交互:在assets/js/app.js文件中创建 JS Hook,用于处理用户交互,如打开和关闭选择菜单、键盘导航、选择选项等。通过mounted函数添加事件监听器,setActiveElementIndex函数更新活动选项索引,onItemSelect函数处理选项选择事件,实现基本的键盘导航系统和选项选择功能。
  • 使其可搜索:为实现可搜索的选择组件,在 LiveView 中为选择组件添加autocomplete属性,并在 JS Hook 的mounted函数中添加输入事件监听器,在 LiveView 中添加处理autocomplete_countries事件的handle_event函数,以根据搜索查询更新选项列表,但存在重新渲染时选择菜单关闭的问题。
  • 重新渲染注意事项:添加updated函数到 JS Hook,确保 DOM 与组件内部状态同步,解决重新渲染时的问题,如保持选择菜单打开、更新隐藏输入值和添加事件监听器。
  • 结论:完成了一个功能齐全的选择组件,涵盖了 Phoenix LiveView 开发的多个方面,包括构建新的 LiveView 和表单、自定义组件、使用 JS Hook 处理用户交互、事件通信和保持组件与 DOM 同步等。

总之,通过逐步实现各个功能模块,成功构建了一个具有多种特性的选择输入组件,为 Phoenix LiveView 的开发提供了实践经验和参考。

阅读 11
0 条评论