为什么popper.js在Laravel中不起作用

时间:2018-10-15 21:12:28

标签: javascript laravel popper.js

我已经尝试了很多可以在Internet上找到的选项,但是我无法使其正常工作。

我在终点站跑了

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']
})

然后我将此代码添加到包含我的标头的包含模板中

 <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,我是一个新手,但我对学习很感兴趣

请告诉我我想念的东西

预先感谢

包含文件(标题)

<!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>

4 个答案:

答案 0 :(得分:3)

我知道这是一篇过时的文章,但这使我感到困惑,在一些其他场合,我最终在这里寻找答案,然后才在其他地方找到它。我绝不是专家,但是对我来说,这是这一行中的“延迟”:

<script src="{{ asset('js/app.js') }}" defer>

“延迟”会导致脚本在页面加载后 加载,这也是在加载popper脚本之后。 jQuery已加载到您的js / app.js中,因此,即使js / app.js位于页面上方,它也不会加载到popper脚本之后。

您可以从该行中删除“ defer”,这将导致它立即在您的popper脚本之前加载,但是这对我来说却打破了其他一些东西(那些正在寻找体内没有的元素的东西)尚未加载)。因此,我还向其他<script>行添加了'defer',这导致它们以正确的顺序加载。希望这也可以为您服务。

答案 1 :(得分:0)

您有两个结束body标签。然后,您将脚本加载到标题中。 在脚本中使用src时,它将加载文件,而不会使用正文。所以你应该使用:

<script src="{{ asset('js/app.js') }}" defer />

<script>
    $(function () {
        $('[data-toggle="popover"]').popover()
    });
</script>

但是,请将其放在body标记的末尾。

-编辑-

使用CDN链接

</body>

答案 2 :(得分:0)

编辑package.json添加.js

"dependencies": {
    "popper.js": "^1.0.1",
    "tooltip.js": "^1.3.0"
}

并且永远不要使用popper.jspopper.min.js作为CDN或头部或身体上的脚本标签 它将与app.js脚本标记冲突

答案 3 :(得分:0)

在关闭 body 标签前添加 </body>

<script src="{{ asset('js/app.js') }}" defer />