为什么 popper.js 在 laravel 中不起作用
Why does popper.js doesnt work in laravel
我已经尝试了很多可以在互联网上找到的选项,但我无法让它工作..
我在终端运行:
npm install popper.js --save
接下来我编辑了我的 "resources/js/bootstrap.js";
window._ = require('lodash');
import Popper from 'popper.js/dist/umd/popper.js';
/**
* We'll load jQuery and the Bootstrap jQuery plugin which provides support
* for JavaScript based Bootstrap features such as modals and tabs. This
* code may be modified to fit the specific needs of your application.
*/
try {
window.$ = window.jQuery = require('jquery');
window.Popper = Popper;
require('bootstrap');
} catch (e) {}
然后我将其添加到我的 webpack.mix.js
mix.autoload({
jquery: ['$', 'window.jQuery',"jQuery","window.$","jquery","window.jquery"],
'popper.js': ['Popper']
})
然后我将此代码添加到包含我的 header
的包含模板
<script src="{{ asset('js/app.js') }}" defer>
$(function () {
$('[data-toggle="popover"]').popover()
})
</script>
这是我的页面
<button type="button" class="btn btn-lg btn-danger" data-toggle="popover" title="Popover title" data-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
然后我运行
npm run dev
这是我的package.json
"devDependencies": {
"axios": "^0.18",
"bootstrap": "^4.0.0",
"cross-env": "^5.1",
"jquery": "^3.3.1",
"laravel-mix": "^2.0",
"lodash": "^4.17.5",
"popper.js": "^1.14.4",
"vue": "^2.5.7"
},
"dependencies": {
"popper": "^1.0.1",
"tooltip.js": "^1.3.0"
}
在 javascript 方面我是个新手,但我有兴趣学习
请告诉我我错过了什么
提前致谢
包含文件 (header)
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer>
$(function () {
$('[data-toggle="popover"]').popover()
})
</script>
<!-- Fonts -->
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet"
type="text/css">
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
@include('inc.navbar')
<div class="container">
@include('inc.messages')
@yield('content')
</div>
</body>
<!--<script src="/vendor/unisharp/laravel-ckeditor/ckeditor.js"></script>
<script src="/vendor/unisharp/laravel-ckeditor/adapters/jquery.js"></script>
<script>
$('textarea').ckeditor();
</script>-->
</body>
</html>
您有两个结束 body
标签。然后您正在加载 header 中的脚本。
当您在脚本中使用 src
时,它将加载文件,不会使用 body。所以你应该使用:
<script src="{{ asset('js/app.js') }}" defer />
<script>
$(function () {
$('[data-toggle="popover"]').popover()
});
</script>
但请将其放在 body
内容的末尾,就在 </body>
标记之前。
-- 编辑--
使用 CDN 链接
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
我知道这是一个旧的 post,但这在几个不同的场合让我感到困惑,我最终在这里寻找答案,然后才在其他地方找到它。我绝不是专家,但对我来说,是这一行中的 'defer':
<script src="{{ asset('js/app.js') }}" defer>
'defer' 导致脚本在页面加载之后加载,这也是在您加载 popper 脚本之后。 jQuery 已加载到您的 js/app.js 中,因此它不会在您的 popper 脚本之后加载,即使 js/app.js 位于页面上它们的上方。
您可以从该行中删除 'defer' ,这将导致它立即加载并在您的 popper 脚本之前加载,但这对我来说破坏了其他一些东西(那些正在寻找正文中的元素的东西尚未加载)。所以我也将 'defer' 添加到我的其他 <script>
行,这导致它们以正确的顺序加载。希望这也适用于您。
编辑 package.json
添加 .js
"dependencies": {
"popper.js": "^1.0.1",
"tooltip.js": "^1.3.0"
}
并且永远不要使用 popper.js
或 popper.min.js
作为 CDN 或 head 或 body 上的脚本标签,案例
它将与 app.js 脚本标签
冲突
在关闭正文标签之前添加 </body>
<script src="{{ asset('js/app.js') }}" defer />
我已经尝试了很多可以在互联网上找到的选项,但我无法让它工作..
我在终端运行:
npm install popper.js --save
接下来我编辑了我的 "resources/js/bootstrap.js";
window._ = require('lodash');
import Popper from 'popper.js/dist/umd/popper.js';
/**
* We'll load jQuery and the Bootstrap jQuery plugin which provides support
* for JavaScript based Bootstrap features such as modals and tabs. This
* code may be modified to fit the specific needs of your application.
*/
try {
window.$ = window.jQuery = require('jquery');
window.Popper = Popper;
require('bootstrap');
} catch (e) {}
然后我将其添加到我的 webpack.mix.js
mix.autoload({
jquery: ['$', 'window.jQuery',"jQuery","window.$","jquery","window.jquery"],
'popper.js': ['Popper']
})
然后我将此代码添加到包含我的 header
的包含模板 <script src="{{ asset('js/app.js') }}" defer>
$(function () {
$('[data-toggle="popover"]').popover()
})
</script>
这是我的页面
<button type="button" class="btn btn-lg btn-danger" data-toggle="popover" title="Popover title" data-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
然后我运行
npm run dev
这是我的package.json
"devDependencies": {
"axios": "^0.18",
"bootstrap": "^4.0.0",
"cross-env": "^5.1",
"jquery": "^3.3.1",
"laravel-mix": "^2.0",
"lodash": "^4.17.5",
"popper.js": "^1.14.4",
"vue": "^2.5.7"
},
"dependencies": {
"popper": "^1.0.1",
"tooltip.js": "^1.3.0"
}
在 javascript 方面我是个新手,但我有兴趣学习
请告诉我我错过了什么
提前致谢
包含文件 (header)
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer>
$(function () {
$('[data-toggle="popover"]').popover()
})
</script>
<!-- Fonts -->
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet"
type="text/css">
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
@include('inc.navbar')
<div class="container">
@include('inc.messages')
@yield('content')
</div>
</body>
<!--<script src="/vendor/unisharp/laravel-ckeditor/ckeditor.js"></script>
<script src="/vendor/unisharp/laravel-ckeditor/adapters/jquery.js"></script>
<script>
$('textarea').ckeditor();
</script>-->
</body>
</html>
您有两个结束 body
标签。然后您正在加载 header 中的脚本。
当您在脚本中使用 src
时,它将加载文件,不会使用 body。所以你应该使用:
<script src="{{ asset('js/app.js') }}" defer />
<script>
$(function () {
$('[data-toggle="popover"]').popover()
});
</script>
但请将其放在 body
内容的末尾,就在 </body>
标记之前。
-- 编辑--
使用 CDN 链接
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
我知道这是一个旧的 post,但这在几个不同的场合让我感到困惑,我最终在这里寻找答案,然后才在其他地方找到它。我绝不是专家,但对我来说,是这一行中的 'defer':
<script src="{{ asset('js/app.js') }}" defer>
'defer' 导致脚本在页面加载之后加载,这也是在您加载 popper 脚本之后。 jQuery 已加载到您的 js/app.js 中,因此它不会在您的 popper 脚本之后加载,即使 js/app.js 位于页面上它们的上方。
您可以从该行中删除 'defer' ,这将导致它立即加载并在您的 popper 脚本之前加载,但这对我来说破坏了其他一些东西(那些正在寻找正文中的元素的东西尚未加载)。所以我也将 'defer' 添加到我的其他 <script>
行,这导致它们以正确的顺序加载。希望这也适用于您。
编辑 package.json
添加 .js
"dependencies": {
"popper.js": "^1.0.1",
"tooltip.js": "^1.3.0"
}
并且永远不要使用 popper.js
或 popper.min.js
作为 CDN 或 head 或 body 上的脚本标签,案例
它将与 app.js 脚本标签
在关闭正文标签之前添加 </body>
<script src="{{ asset('js/app.js') }}" defer />