v-if 函数不返回任何内容,但它应该
遇到了过去两个小时一直困扰我的问题。
我在 mixin 中有一个函数,如下所示:
checkPermissionMeetings(type,areaID){
if(this.$store.state.global.permissions.meetings===true) { //If user has basic meeting access
if(type==='write'){
Object.entries(this.$store.state.global.permissions.meeting_areas).forEach(([key, val]) => {
if (parseInt(key) === parseInt(areaID) && (val === 'write')) {
console.log('write_true')
return true;
}
});
}
if(type==='read'){
Object.entries(this.$store.state.global.permissions.meeting_areas).forEach(([key, val]) => {
if (parseInt(key) === parseInt(areaID) && (val === 'read' || val === 'write')) {
console.log('read_true')
return true;
}
});
}
}
},
我在呈现导航栏的视图组件中调用它:
<span v-for="area in area_meetings">
{{area.id}} {{$store.state.global.permissions.meeting_areas[area.id]}} //This is here so I can see that I am sending the correct values to the function
{{checkPermissionMeetings('read', area.id)}} //This is here so I can see the output, but it returns nothing
<router-link tag="v-list-item" link :to="'/meetings/'+area.id" class="ml-5" v-if="checkPermissionMeetings('read', area.id)">
<v-list-item-icon>
<v-icon>mdi-chair-rolling</v-icon>
</v-list-item-icon>
<v-list-item-title>{{area.name}}</v-list-item-title>
</router-link>
</span>
我已经控制台记录了输出,如您在代码中看到的那样,它们看起来不错。我还将该函数放在大括号中,以便我可以看到返回值,但这根本不返回任何内容。
我可以在我的商店中看到它们
我什至在渲染上回显它们并且值匹配...
是我在这里缺少一些基本的东西吗?
Running into an issue that's been bugging me for the past 2 hours.
I've got a function in a mixin like so:
checkPermissionMeetings(type,areaID){
if(this.$store.state.global.permissions.meetings===true) { //If user has basic meeting access
if(type==='write'){
Object.entries(this.$store.state.global.permissions.meeting_areas).forEach(([key, val]) => {
if (parseInt(key) === parseInt(areaID) && (val === 'write')) {
console.log('write_true')
return true;
}
});
}
if(type==='read'){
Object.entries(this.$store.state.global.permissions.meeting_areas).forEach(([key, val]) => {
if (parseInt(key) === parseInt(areaID) && (val === 'read' || val === 'write')) {
console.log('read_true')
return true;
}
});
}
}
},
I am calling it in a view component which renders a navigation bar:
<span v-for="area in area_meetings">
{{area.id}} {{$store.state.global.permissions.meeting_areas[area.id]}} //This is here so I can see that I am sending the correct values to the function
{{checkPermissionMeetings('read', area.id)}} //This is here so I can see the output, but it returns nothing
<router-link tag="v-list-item" link :to="'/meetings/'+area.id" class="ml-5" v-if="checkPermissionMeetings('read', area.id)">
<v-list-item-icon>
<v-icon>mdi-chair-rolling</v-icon>
</v-list-item-icon>
<v-list-item-title>{{area.name}}</v-list-item-title>
</router-link>
</span>
I've console logged the outputs as you can see in the code, and they are looking ok. I have also put the function in curly braces so I can see the return, but this returns nothing at all.
I can see them in my store
I'm even echoing them out on the render and the values match...
Is there something fundamental I'm missing here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为您的
return
进入forEach
方法,所以您的 main 函数不会返回任何内容。您可以尝试保存一些变量返回的数据,并在if
语句之后返回它。或者更简单的方法是使用另一个循环,例如for of
Because your
return
intoforEach
method, your main function doesn't return anything. You can try to save in some variable returned data and afterif
statements return it. Or more easy way it use another loop likefor of
正如其他答案中所述,使用
for
会起作用,但我将描述为什么它不起作用:从这些可以清楚地看出,在这种情况下我们不能使用 forEach
如果您想了解更多信息:
`return` 关键字在 `forEach` 函数中意味着什么?
短路Array.forEach就像调用break
为什么使用 return 时 forEach 返回 undefined声明
As claimed in other answers, using
for
would be working but I will describe why it won't work:It is clear from these that we can't use forEach in this situation
If you wanna know more about these:
What does `return` keyword mean inside `forEach` function?
Short circuit Array.forEach like calling break
Why does this forEach return undefined when using a return statement