簡體   English   中英

如何使用 Rails + Webpack 配置 Bootstrap 插件?

[英]How to configure Bootstrap plugins with Rails + Webpack?

我正在使用 webpack 設置一個新的 rails 項目,但我不知道如何啟用 Bootstrap 插件(工具提示、警報等)。

1) 安裝的依賴項:

yarn add bootstrap jquery popper.js

2)我需要app/javascript/packs/application.js的模塊:

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
require("jquery")
require("popper.js")
require("bootstrap")

3) 在全局范圍內啟用$ y jQuery

const webpack = require('webpack')
environment.plugins.prepend('Provide',
  new webpack.ProvidePlugin({
    $: 'jquery/src/jquery',
    jQuery: 'jquery/src/jquery'
  })
)

4)在我看來:

<button type="button" class="btn btn-secondary" data-toggle="tooltip" data-placement="top" title="Tooltip">
  Button
</button>

我知道 JQuery 正在工作,因為我可以從瀏覽器控制台運行$('#some-id')類的東西。 但是我不能使用 Bootstrap 的插件。 該按鈕不顯示工具提示。

如果我輸入$('#some-id').tooltip()$('#other-id').alert()我得到以下錯誤:

未捕獲的類型錯誤:$.alert 不是函數

我怎樣才能解決這個問題? 我讀過我需要單獨導入插件,但它對我不起作用:

import 'bootstrap/js/dist/alert';

有什么我想念的嗎?

嘗試這個

Rails 6.0.1

config/webpack/enviornment.js

const { environment } = require('@rails/webpacker')
const webpack = require('webpack')

environment.plugins.prepend('Provide',
  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery',
  })
)

module.exports = environment

app/javascript/packs/application.js

import "../stylesheets/application"

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")

import 'bootstrap/js/src/tooltip'
import 'bootstrap/js/src/alert'

import './main'

window.$ = window.jQuery = $ // make $ available in console for debugging

app/javascript/packs/main.js

// Wait for turbolinks load event
$(document).on('turbolinks:load', () => {
  $('[data-toggle="tooltip"]').tooltip()
  $('.alert').alert()
})

app/javascript/stylesheets/application.scss

$primary: #757575;
$light: #e9ecef;

@import 'bootstrap';
@import 'custom.css';

加載上面的樣式表

layouts/application.html.erb

添加<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>

或者用stylesheet_link_tag替換stylesheet_pack_tag 如果您不想在assets/stylesheets表中使用樣式assets/stylesheets

將這些行添加到app/javascript/packs/application.js

import * as bootstrap from 'bootstrap'

document.addEventListener("DOMContentLoaded", function(event) {
  var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
  var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
    return new bootstrap.Popover(popoverTriggerEl)
  })

  var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
  var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
    return new bootstrap.Tooltip(tooltipTriggerEl)
  })
});

為 B5 導入 popper.js 是yarn add @popperjs/core

參考: Bootstrap5 工具提示

我也面臨警報問題,我使用了 bootstrap5 警報文檔代碼,然后它會正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM