无法读取未定义的属性 Nuxt.js
Cannot read properties of undefined Nuxt.js
我正在尝试根据传递给“open”变量的值在点击事件上调用 showMenu 方法。
但是我无法读取 undefined 的属性,而 open 是一个已定义的变量。
我尝试在它起作用的点击事件上控制台记录一些东西,但是每当我尝试与据我所知定义的开放变量交互时,我收到未定义的错误消息。
<template>
<nav>
<div class="header-one">
<div class="header">
<div class="logo">Logo</div>
<div class="navigation" id="nav">
<nuxt-link to="/">Home</nuxt-link>
<nuxt-link to="/">About</nuxt-link>
<nuxt-link to="/">Login</nuxt-link>
<nuxt-link to="/">Logout</nuxt-link>
<nuxt-link to="/">Profile</nuxt-link>
</div>
**<div class="burger" id="burger" @click="showMenu">**
<div></div>
<div></div>
<div></div>
</div>
</div>
</div>
<MobileMenu v-if="this.open"/>
</nav>
</template>
<script>
import MobileMenu from "~/components/MobileMenu";
export default {
name: "HeaderMenu",
MobileMenu,
data: function(){
return{
**open: false,**
}
},
methods:{
showMenu:() =>{
**this.open = !this.open**
}
}
}
</script>
发生这种情况是因为您的 showMenu
函数是一个箭头函数,它改变了 this
的范围。
这里this
指的是功能范围而不是组件
改用经典函数
这是一个例子
new Vue({
el: '#app',
data: () => {
return {
open: false
}
},
methods: {
toggleOpen1(){
this.open = !this.open
},
toggleOpen2: () => {
this.open = !this.open
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div>Open : {{ open }}</div>
<button @click="toggleOpen1">Toggle open 1</button>
<button @click="toggleOpen2">Toggle open 2</button>
</div>
如您所见,toggleOpen1
(经典函数)方法有效,而 toggleOpen2
(箭头函数)无效。
我正在尝试根据传递给“open”变量的值在点击事件上调用 showMenu 方法。
但是我无法读取 undefined 的属性,而 open 是一个已定义的变量。
我尝试在它起作用的点击事件上控制台记录一些东西,但是每当我尝试与据我所知定义的开放变量交互时,我收到未定义的错误消息。
<template>
<nav>
<div class="header-one">
<div class="header">
<div class="logo">Logo</div>
<div class="navigation" id="nav">
<nuxt-link to="/">Home</nuxt-link>
<nuxt-link to="/">About</nuxt-link>
<nuxt-link to="/">Login</nuxt-link>
<nuxt-link to="/">Logout</nuxt-link>
<nuxt-link to="/">Profile</nuxt-link>
</div>
**<div class="burger" id="burger" @click="showMenu">**
<div></div>
<div></div>
<div></div>
</div>
</div>
</div>
<MobileMenu v-if="this.open"/>
</nav>
</template>
<script>
import MobileMenu from "~/components/MobileMenu";
export default {
name: "HeaderMenu",
MobileMenu,
data: function(){
return{
**open: false,**
}
},
methods:{
showMenu:() =>{
**this.open = !this.open**
}
}
}
</script>
发生这种情况是因为您的 showMenu
函数是一个箭头函数,它改变了 this
的范围。
这里this
指的是功能范围而不是组件
改用经典函数
这是一个例子
new Vue({
el: '#app',
data: () => {
return {
open: false
}
},
methods: {
toggleOpen1(){
this.open = !this.open
},
toggleOpen2: () => {
this.open = !this.open
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div>Open : {{ open }}</div>
<button @click="toggleOpen1">Toggle open 1</button>
<button @click="toggleOpen2">Toggle open 2</button>
</div>
如您所见,toggleOpen1
(经典函数)方法有效,而 toggleOpen2
(箭头函数)无效。