Bulma navbar-burger 未连接到 Vue.js 2 中的菜单项

Posted

技术标签:

【中文标题】Bulma navbar-burger 未连接到 Vue.js 2 中的菜单项【英文标题】:Bulma's navbar-buger doesnt connect to menu items in Vue.js 2 【发布时间】:2018-02-22 23:19:29 【问题描述】:

我正在尝试为我的应用程序实现一个导航栏,该应用程序的前端是使用 Vue 2.0 和 Bulma 构建的。它在台式机上运行良好,但在较小的屏幕上显示汉堡图标但不显示任何元素。它就在眼前。

<template>
<div class="container is-fluid">
    <div>
      <nav class="navbar is-dark">
        <div class="navbar-brand">
          <a class="navbar-item" href="#">
              <img   >
          </a>
          <div class="button navbar-burger" data-target="navMenu">
              <span></span>
              <span></span>
              <span></span>
        </div>
        </div>
        <div class="navbar-menu" id="navMenu">
          <div class="navbar-end">
            <div class="navbar-item">
              <a class="" href="#"> Docs </a>
            </div>
            <div class="navbar-item ">
              <a class="" href="#"> Report </a>
            </div>
            <div class="navbar-item">
              <a class="">More</a>
            </div>
            <div class="navbar-item">
              <a class="">Logout</a>
            </div>
        </div>
      </div>
    </nav>
  </div>
</div>
</template>

<script>

document.addEventListener('DOMContentLoaded', function () 
  // Get all "navbar-burger" elements
  var $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0)
  // Check if there are any navbar burgers
  if ($navbarBurgers.length > 0) 
    // Add a click event on each of them
    $navbarBurgers.forEach(function ($el) 
      $el.addEventListener('click', function () 
        // Get the target from the "data-target" attribute
        var target = $el.dataset.target
        var $target = document.getElementById(target)

        // Toggle the class on both the "navbar-burger" and the "navbar-menu"
        $el.classList.toggle('is-active')
        $target.classList.toggle('is-active')
      )
    )
  
)
export default 
  name: 'Navbar',
  data () 
    return 
      msg: ''
    
  

</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
div
  border: 0px solid black;

</style>

如您所见,我已尝试实现此处存在但没有用的示例代码。布尔玛不应该给我开箱即用的响应式导航栏。我发现的所有示例和解决方案都是针对较旧的“导航”类而不是较新的“导航栏”。非常感谢您的帮助。

【问题讨论】:

如果你在使用 Vue 为什么你用纯 JS 定义事件? 这是我的测试平台。我是 Vue 的新手,所以没有继续使用它。有没有更惯用的 vue 方式? 当然,vue 让这些事情做起来更容易,我建议你阅读一下它 @fatman 有什么具体的指针吗? vuejs.org/v2/guide 【参考方案1】:

所以,在研究了 Vue 指南和 fatman 的 cmets 提供的线索之后,我采用了这个修复方法。

上面的代码可以工作,但这是一种更 vue-ish 的方式来做 navbar-burger 菜单。

<template>

      <nav class="navbar">
        <div class="container">
        <div class="navbar-brand is-large">
          <a class="navbar-item" href="#">
              <img   >
          </a>
          <button @click="makeBurger" class="button navbar-burger" data-target="navMenu" v-bind:class=" 'is-active': activator ">
              <span></span>
              <span></span>
              <span></span>
        </button>
        </div>
        <div class="navbar-menu" id="navMenu" v-bind:class=" 'is-active': activator ">
          <div class="navbar-end">
            <div class="navbar-item">
              <a class="" href="#"> Docs </a>
            </div>
            <div class="navbar-item ">
              <a class="" href="#"> Report </a>
            </div>
            <div class="navbar-item">
              <a class="">More</a>
            </div>
            <div class="navbar-item">
              <a class="">Logout</a>
            </div>
        </div>
      </div>
      </div>
    </nav>

</template>

<script>
export default 
  name: 'Navbar',
  data () 
    return 
      msg: '',
      activator: false
    
  ,
  methods: 
    makeBurger () 
      this.activator = !this.activator
      return this.activator
    
  

</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
div
  border: 0px solid black;

</style>

希望这对某人有所帮助。显示/隐藏功能由 Bulma 负责。

【讨论】:

【参考方案2】:

这行得通,但是

    不会关闭菜单 将导致路由器链接不起作用

对于 1.) 我建议也将 @click 添加到 navbar-item:

<a @click="makeBurger" class="navbar-item">
    <router-link to="/login">
        link1
    </router-link>
</a>

【讨论】:

能否请您详细说明第 1 点。因为我可以关闭我的菜单 嗨@VipinRai,使用 navbar-item 处的代码关闭菜单,否则不会。但是对于 2.) 我一直不精确:用户必须明确单击导航栏项的文本,而不是行 - 然后将加载路由器的内容。如果用户单击该行 - 菜单消失,但内容保持不变。

以上是关于Bulma navbar-burger 未连接到 Vue.js 2 中的菜单项的主要内容,如果未能解决你的问题,请参考以下文章

Nextcloud 未连接到 Redis

查尔斯调试代理未连接到本地主机

布尔玛汉堡菜单不显示项目

未连接到互联网时如何显示警报? iOS

ngrok 未连接到本地服务器

未连接到视图的元素