使用Tempus Dominus Bootstrap4 DateTimePicker遇错求助(Laravel环境)
解决Laravel项目中集成Tempus Dominus Bootstrap4 DateTimePicker的常见问题
嘿,我帮你梳理下在Laravel(用laravel-mix构建)里集成这款日期时间选择器的常见问题和解决步骤——这类组件的坑大多集中在依赖加载顺序、mix配置或者初始化代码上,咱们一步步来:
1. 先把依赖包装对
首先确保你已经安装了所有必需的包,打开项目根目录的终端,执行:
npm install tempusdominus-bootstrap-4 moment --save-dev
2. 配置laravel-mix,注意加载顺序
这一步很关键,moment.js必须在Tempus Dominus之前加载,否则会直接报错找不到moment。有两种配置方式:
方式一:单独打包资源到指定文件
修改webpack.mix.js,添加对Tempus Dominus的CSS和JS的打包:
mix.js('resources/js/app.js', 'public/js') .sass('resources/sass/app.scss', 'public/css') // 打包Tempus Dominus的CSS .styles([ 'node_modules/tempusdominus-bootstrap-4/build/css/tempusdominus-bootstrap-4.min.css' ], 'public/css/tempusdominus.css') // 按顺序打包moment和Tempus Dominus的JS .scripts([ 'node_modules/moment/min/moment.min.js', 'node_modules/tempusdominus-bootstrap-4/build/js/tempusdominus-bootstrap-4.min.js' ], 'public/js/tempusdominus.js');
方式二:ES模块引入(更简洁)
直接在resources/js/app.js里引入依赖,这样不用额外配置mix的styles/scripts:
// 引入moment并挂载到全局,让Tempus Dominus能访问到 import moment from 'moment'; window.moment = moment; // 引入Tempus Dominus的JS和CSS import 'tempusdominus-bootstrap-4'; import 'tempusdominus-bootstrap-4/build/css/tempusdominus-bootstrap-4.min.css';
配置完后,记得执行npm run dev(开发环境)或者npm run prod(生产环境)编译资源。
3. 在Blade模板里正确引入资源
如果用的是方式一的单独打包,要在你的模板(比如layouts.app)里引入编译后的文件:
<!-- 在<head>标签里引入CSS --> <link rel="stylesheet" href="{{ asset('css/tempusdominus.css') }}"> <!-- 在</body>标签前引入JS --> <script src="{{ asset('js/tempusdominus.js') }}"></script>
如果用的是方式二的ES模块引入,只要确保你的模板已经引入了app.js和app.css就行——Laravel默认的layouts.app里已经包含了这些,所以不用额外加。
4. 正确初始化日期选择器
在你的@section('content')里添加input元素,然后写初始化脚本,注意组件的DOM结构要符合要求:
@section('content') @if((Auth::user()->hasRole('teacher')) || (Auth::user()->hasRole('admin')) || (Auth::user()->hasRole('superadmin')) ) <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">日期时间选择器</div> <div class="card-body"> <!-- 日期选择器的DOM结构 --> <div class="form-group"> <label for="datetimepicker">选择日期时间</label> <div class="input-group date" id="datetimepicker" data-target-input="nearest"> <input type="text" class="form-control datetimepicker-input" data-target="#datetimepicker"/> <div class="input-group-append" data-target="#datetimepicker" data-toggle="datetimepicker"> <div class="input-group-text"><i class="fa fa-calendar"></i></div> </div> </div> </div> </div> </div> </div> </div> </div> @endif <!-- 初始化脚本 --> <script> $(function () { $('#datetimepicker').datetimepicker({ // 可以添加自定义配置,比如日期格式 format: 'YYYY-MM-DD HH:mm:ss', // 如果需要中文界面,先安装moment中文包:npm install moment/locale/zh-cn // 然后在app.js里引入:import 'moment/locale/zh-cn'; 再在这里设置locale locale: 'zh-cn' }); }); </script> @endsection
5. 常见错误排查
如果还是报错,先检查这几点:
moment is not defined:说明moment没有挂载到全局,在app.js里加上window.moment = moment;就行。$(...).datetimepicker is not a function:要么是Tempus Dominus的JS没加载,要么是加载顺序错了,检查mix配置和模板里的引入顺序。- 路径错误:执行编译命令后,检查
public/css和public/js下是否生成了对应的文件,asset()函数的路径是否正确。 - jQuery未加载:Laravel默认的
app.js已经包含jQuery,只要模板里引入了app.js就没问题,别重复引入旧版本的jQuery导致冲突。
内容的提问来源于stack exchange,提问作者Hayreddin Tüzel
相关产品推荐
相关产品推荐

