vue.js“;TypeError:无法读取属性';路径';“未定义”的定义;
我知道这是一个常见的问题,但是我已经检查了我的文件很多次了,却找不到错误所在。 当我尝试在导航菜单中路由到我的组件时,我遇到此错误 My app.vue文件:vue.js“;TypeError:无法读取属性';路径';“未定义”的定义;,vue.js,Vue.js,我知道这是一个常见的问题,但是我已经检查了我的文件很多次了,却找不到错误所在。 当我尝试在导航菜单中路由到我的组件时,我遇到此错误 My app.vue文件: <template> <div id="app"> <Navbar :nav-links="navLinks" /> <router-view/> </div> </template> <script>
<template>
<div id="app">
<Navbar
:nav-links="navLinks"
/>
<router-view/>
</div>
</template>
<script>
import Navbar from '@/components/Navbar'
export default {
components: {
Navbar
},
data: () => ({
navLinks: [
{
text: 'Home',
path: '/home'
},
{
text: 'About',
path: '/about'
},
{
text: 'Contact',
path: '/contact'
}
]
})
}
</script>
从“@/components/Navbar”导入Navbar
导出默认值{
组成部分:{
导航栏
},
数据:()=>({
导航链接:[
{
文本:“主页”,
路径:'/home'
},
{
文本:“关于”,
路径:'/about'
},
{
文本:“联系人”,
路径:'/contact'
}
]
})
}
我的导航栏组件(这是发生错误的地方)
-
{{link.text}
导出默认值{
道具:['navLinks'],
数据(){
返回{
悬停:错,
}
}
}
如何修复此问题?导航栏组件中的一个道具名为导航链接,但您可以在外部以导航链接的形式访问它。 这应该起作用:
:navLinks="navLinks"
v-for与{}的语法不正确。使用():
li v-for="(link, index) in navLinks
导航栏组件中的道具名为navLinks,但您可以在外部以nav links访问它。 这应该起作用:
:navLinks="navLinks"
v-for与{}的语法不正确。使用():
li v-for="(link, index) in navLinks
另一个不相关的注释:
hover
属性当前正在所有导航链接中共享。如果您希望它以某种方式与当前悬停的元素相关,那么您必须单独保存它(可能在navLink内部)
至于
:nav links=“navLinks”
,您所做的不仅是完全合法的,而且是推荐的做法(根据HTML规范)。使用:navLinks=“navLinks”
依赖于Vue的HTML解析器,该解析器在幕后将其转换为nav links
——检查HTML元素,您会注意到它)
如果你想了解细节,你可以看看这个主题。结果是:使用其中一个,但是如果使用camelCase
,它将与呈现的标记不一致。如果您使用kebab case
,它将与呈现的标记一致,因此您在编写测试时不必处理这种差异,例如,您是否需要根据元素的属性选择元素(jest将camelCase
转换为lowercase
——因此它与呈现的标记不一致,因此测试根据是使用mount
还是shallowMount
开始通过/失败。不用说,这不是一个好的测试设置。)
使用
与
的讨论也完全相同。虽然两者都有效,但如果需要选择存根子组件,则在编写测试时需要解决使用first的问题
此外,(您的操作方式)是以下vue linting预设的一部分:
- 插件:vue/强烈推荐
- 插件:建议使用vue/vue3
- 插件:vue/推荐
另一个不相关的注意事项:
hover
属性当前正在所有navLink中共享。如果您希望它以某种方式与当前悬停的元素相关,则必须单独保存(可能在navLink内部)
至于
:nav links=“navLinks”
,您所做的不仅是完全合法的,而且是推荐的做法(根据HTML规范)。使用:navLinks=“navLinks”
依赖于Vue的HTML解析器,该解析器在幕后将其转换为nav links
——检查HTML元素,您会注意到它)
如果你想了解细节,你可以看看这个主题。结果是:使用其中一个,但是如果使用camelCase
,它将与呈现的标记不一致。如果您使用kebab case
,它将与呈现的标记一致,因此您在编写测试时不必处理这种差异,例如,您是否需要根据元素的属性选择元素(jest将camelCase
转换为lowercase
——因此它与呈现的标记不一致,因此测试根据是使用mount
还是shallowMount
开始通过/失败。不用说,这不是一个好的测试设置。)
使用
与
的讨论也完全相同。虽然两者都有效,但如果需要选择存根子组件,则在编写测试时需要解决使用first的问题
此外,(您的操作方式)是以下vue linting预设的一部分:
- 插件:vue/强烈推荐
- 插件:建议使用vue/vue3
- 插件:vue/推荐
- 您在这里犯了两个错误。
一个是:
<template>
<div id="app">
<Navbar
:nav-links="navLinks"
/>
<router-view/>
</div>
在这里,您使用不同的名称绑定(导航链接)
,您应该保持绑定数据时使用的名称与道具(导航链接)
中的名称相同。
两个名字应该相同
第二个:
v-for=“{link,index}在导航链接中”
语法错误,正确的语法应该是
v-for=“(链接,索引)在导航链接中”
您在这里犯了两个错误。
一个是:
<template>
<div id="app">
<Navbar
:nav-links="navLinks"
/>
<router-view/>
</div>
在这里,您使用不同的名称绑定(导航链接)
,您应该保持绑定数据时使用的名称与道具(导航链接)
中的名称相同。
两个名字应该相同
第二个:
v-for=“{link,index}在导航链接中”
语法错误,正确的语法应该是
<template>
<div id="app">
<Navbar
:nav-links="navLinks"
/>
<router-view/>
</div>