未捕获(在承诺中)TypeError:无法读取 Laravel 和 vue.js 中未定义的属性“forEach”
2017-11-23
5445
Hello friends I am tired of getting this error when i count a length of notification by using vue.js and Laravel it show error,Uncaught (in promise) TypeError: Cannot read property 'forEach' of undefined plz help me. here is my code.
store.js
import Vuex from 'vuex'
import Vue from 'vue'
Vue.use(Vuex)
export const store = new Vuex.Store({
state: {
nots: []
},
getters: {
all_nots(state) {
return state.nots
},
all_nots_count(state) {
return state.nots.length
},
},
mutations: {
add_not(state, not) {
state.nots.push(not)
},
}
})
UnreadNots.vue
<template>
<li>
<a href="/notifications">
Unread notifications
<span class="badge">{{ all_nots_count }}</span>
</a>
</li>
</template>
<script>
export default {
mounted() {
this.get_unread()
},
methods: {
get_unread() {
this.$http.get('/get_unread')
.then( (nots) => {
nots.body.forEach( (not) => {
this.$store.commit('add_not', not)
})
})
}
},
computed: {
all_nots_count() {
return this.$store.getters.all_nots_count
}
}
}
</script>
web.php
Route::get('get_unread', function(){
return Auth::user()->unreadNotification;
});
3个回答
为避免错误,您需要测试返回值以确保它具有您所期望的所有内容。
if(nots && nots.body && nots.body.length){
nots.body.forEach( (not) => {
this.$store.commit('add_not', not)
})
}
bbsimonbb
2017-11-23
您正在遇到此错误,因为
foreach
期望数组。它是不确定的。从错误中可以明显看出。
解决此问题的一种可能方法是检查
nots.body
是一个数组并且具有项目。
553169253
另一个提示是不使用URL中的下划线。例如,Google将以强调为单词将单词视为一个单词,但对于连字符,他们会认为这是两个词。
get_unread
应该是
get-unread
。这可能不是一个大问题,但是如果您为其他URL这样做,例如
my_blog_title
,那么这是一个更大的问题。
诸如此类通知的更好解决方案是一种休息样式方法喜欢
http://mywebsite.com/user/notifications/unread
Pistachio
2017-11-23
不要使用 nots.body,而要使用 nots.data。 我 5 分钟前也遇到了同样的问题
Whisky Dollar
2018-08-24