【发布时间】:2017-06-14 01:54:25
【问题描述】:
这个想法是在 Vue 实例中使用 'isActive' 布尔数组,以便在每次加载导航栏时更新它,即使用从 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>
在这里,我将响应式地将数组中的当前页面索引(例如:'login')更新为 true,并且随着新页面的访问(例如:'signup'),它们将被添加为索引并设置为 true;并在卸载资源之前设置为 false。
也许我应该使用Vue.set(vm.isActive, currentPage, false),以便在 vm.isActive 不存在或不更新的情况下将新属性反应性地添加到它。问题是我创建 Vue 实例没有意义,因为我无法导出它。如果我修改 navbarOpts 并像我一样将其导出,那么每次呈现 Navbar.vue 时都会创建 navbarOpts 并且它所保存的所有内容都会丢失。
【问题讨论】:
-
如果 StackOverflow 没有帮助,您可能还想尝试 Gitter 聊天:gitter.im/vuejs/vue;他们在那里非常有帮助。
标签: javascript vue.js