javascript - Vue.js 中的动态导航组件

标签 javascript vue.js

这个想法是在 Vue 实例中拥有“isActive” bool 数组,以便每次加载导航栏时更新它,即使用从 URL 获取的当前页面名称作为数组中的索引,并将其值设置为真的;并将“onbeforeunload”设置为 false。

Navbar.vue

<template>
  <div class="navbar">
    <nav>
      <ul>
        <li v-bind:class="{ active: isActive['login'] }">
          <a href="/login">Log in</a>
        </li>
        <li v-bind:class="{ active: isActive['signup'] }">
          <a href="/signup">Sign up</a>
        </li>
      </ul>
    </nav>
  </div>
</template>

<script>    
  import Vue from 'Vue'

  var navbarOpts = {
    name: 'navbar',
    data {
      return {
        isActive: []
      }
    }
  })
  module.exports = navbar

  function pageName(pathname) {} // Returns no-spaced string

  var currentPage = pageName(window.location.pathname)

  if (currentPage !== '') { // If not in home page
    navbar.data().isActive[currentPage] = true
    window.onbeforeunload = function () {
      navbar.data().isActive[currentPage] = false
    }
  }
</script>

在这里,我会 react 性地将数组中的当前页面索引(例如:“登录”)更新为 true,并且当访问新页面(例如:“注册”)时,它们将被添加为索引并设置为 true;并在卸载资源之前设置为 false。

也许我应该使用 Vue.set(vm.isActive, currentPage, false) 这样,如果 vm.isActive 不存在或更新,新属性就会被 react 性地添加到其中。问题是我创建 Vue 实例没有意义,因为我无法导出它。如果我像我一样修改 navbarOpts 并将其导出,则每次渲染 Navbar.vue 时都会创建 navbarOpts,并且它保存的所有内容都会丢失。

最佳答案

您没有正确使用单文件组件格式。您创建一个组件实例并导出它,您应该只导出用于创建组件的选项对象(您传递给new Vue({ ...这个对象})

关于javascript - Vue.js 中的动态导航组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41909972/

相关文章:

javascript - 使用 jQuery 从原始页面内容创建 iframe

javascript - 我尝试用 Parcel 构建一个 vue 项目,但现在失败了……或者说,我遇到了一些错误

javascript - VueJS如何做这种 "for"循环: for(i = 0; i < x; i++)

apache - 为 VUE-JS SPA 设置 .htaccess 重写规则

vue.js - Electron 中的 Vite + Vue3 : how to import and use Material Design Icons @mdi/font (or any other icon font)

javascript - Angular:如何将 *ngFor 与父子组件一起使用

javascript - dygraph 1.1.1 似乎错误地检测数据源的范围值

javascript - Vue : Delay option not working with v-popover

javascript - 如何删除全日历中的空列月份

javascript - 使用变换比例时如何使图像在 div 中居中