Laravel9+Vite.js环境下Blade文件实现Bootstrap提示框的方式是否正确?
Laravel 9 + Vite.js 环境下启用Bootstrap Tooltip和Popover的方案验证
你的方案是可行的,能正常实现Tooltip和Popover的功能,不过可以做一些优化让代码更贴合Laravel+Vite的开发规范:
核心步骤的正确性确认
内联脚本声明
type="module":
这个是必要操作,因为Vite默认输出ES模块,只有声明了type="module"的内联脚本,才能访问到你挂载到window上的$和bootstrap对象,你的写法没问题。resources/js/bootstrap.js的配置:
通过import引入jQuery和Bootstrap,再挂载到window全局对象的写法完全正确,这样全局环境就能调用$和bootstrap相关API。Blade中Tooltip初始化代码:
逻辑完全正确,能批量初始化页面上所有带data-bs-toggle="tooltip"的元素。可以简化成更简洁的ES6写法:<script type="module"> $(function () { document.querySelectorAll('[data-bs-toggle="tooltip"]') .forEach(el => new bootstrap.Tooltip(el)); }); </script>如果要同时启用Popover,只需要扩展选择器并初始化:
<script type="module"> $(function () { // 初始化Tooltip document.querySelectorAll('[data-bs-toggle="tooltip"]') .forEach(el => new bootstrap.Tooltip(el)); // 初始化Popover document.querySelectorAll('[data-bs-toggle="popover"]') .forEach(el => new bootstrap.Popover(el)); }); </script>
更规范的优化方案(推荐)
建议把初始化逻辑放到JS模块中,而非内联在Blade文件里,符合模块化开发思路:
- 在
resources/js/app.js中添加初始化代码:import './bootstrap'; $(function () { // 全局初始化Tooltip document.querySelectorAll('[data-bs-toggle="tooltip"]') .forEach(el => new bootstrap.Tooltip(el)); // 全局初始化Popover document.querySelectorAll('[data-bs-toggle="popover"]') .forEach(el => new bootstrap.Popover(el)); }); - 在Blade模板中只需要通过Vite指令引入打包后的脚本即可:
这种方式下不需要再写单独的内联@vite(['resources/js/app.js'])type="module"脚本,因为@vite生成的脚本已经是模块类型。
内容的提问来源于stack exchange,提问作者Francis Pocket Lacerte
相关产品推荐
相关产品推荐

