【问题标题】:Why does popper.js doesnt work in laravel为什么 popper.js 在 laravel 中不起作用
【发布时间】:2018-10-15 21:12:28
【问题描述】:

我已经尝试了很多可以在互联网上找到的选项,但我无法让它工作..

我在终端跑了:

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>

【问题讨论】:

  • 你试过使用CDN吗? &lt;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"&gt;&lt;/script&gt; 你应该把它放在引导脚本之前。
  • 我试过了,但还是没有,&lt;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"&gt; $(function () { $('[data-toggle="popover"]').popover() }) &lt;/script&gt; &lt;script src="{{ asset('js/app.js') }}" defer&gt;&lt;/script&gt;
  • 您只希望它用于引导程序吗?因为我从这里使用 CDN 链接:http://getbootstrap.com/docs/4.1/getting-started/download/ 并且不要忘记 jquery 和 popper 都需要位于引导链接上方和 &lt;/body&gt; 标记之前。
  • 生病编辑我的问题,以便您可以看到我的整个设置

标签: javascript laravel popper.js


【解决方案1】:

我知道这是一篇旧帖子,但这在几个不同的场合让我感到困惑,我最终在这里寻找答案,然后在其他地方找到它。我绝不是专家,但对我来说,这是这行中的“延迟”:

&lt;script src="{{ asset('js/app.js') }}" defer&gt;

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

您可以从该行中删除“延迟”,这将导致它立即加载并在您的 popper 脚本之前加载,但这对我来说破坏了其他一些事情(那些正在寻找身体中没有的元素的事情尚未加载)。所以我也将“延迟”添加到我的其他&lt;script&gt; 行中,这导致它们以正确的顺序加载。希望这也对你有用。

【讨论】:

    【解决方案2】:

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

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

    但是把它放在body 内容的末尾,就在&lt;/body&gt; 标记之前。

    -- 编辑--

    使用 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>
    

    【讨论】:

    • 不,仍然无法正常工作.. 你是对的,我的错误,通过尝试很多我没有看到双重 &lt;/body&gt;
    • 所以我不确定它是否适合你。仅凭您通过的内容,我看不到错误。因此,如果只是为了引导,我会建议尝试使用 CDN 链接。并以正确的顺序使用它们。首先是 jQuery,然后是 Popper,而不是 Bootstrap。
    • 如果我像你所说的那样输入代码,我的 chrome 开发者控制台中会出现 $ is not defined 错误
    • 如果您查看我的资源/js/bootstrap.js,您会发现加载顺序是正确的,它是与 laravel 结合使用的引导程序,并且 CDN 链接在我尝试时对我不起作用多次,我想我只是错过了一些重要的东西
    • 现在我只需要弄清楚如何包含这些文件以便我可以在本地使用它们,但非常感谢您的帮助!
    【解决方案3】:

    编辑package.json添加.js

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

    并且永远不要将popper.js 或popper.min.js 用作头部或身体、大小写的CDN 或脚本标签 会和 app.js 脚本标签冲突

    【讨论】:

      【解决方案4】:

      只需在关闭正文标签之前添加&lt;/body&gt;

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

      【讨论】:

        猜你喜欢
        • 2016-06-05
        • 2021-01-20
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        • 2021-08-14
        • 2017-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多