vue踩坑记录:属性报undefined错误问题
vue属性报undefined错误
在一个组件里,通过props传值进去对象,在控制台打印报错误信息,提示某属性不存在。
例如:
<div>{{data.param.aaa}}</div>
类似这种的,取对象子级下面的值,就报了undefined。
原因应该是在初始传值,最多默认 data={}。
我尝试在props里设置好默认值,但是依然报错
这么设置的props:
props:{ data:Object, default:function(){ return { param:'' } } }
这么设置,依然报错。 这个报错,应该是在父组件初始化了 data={}导致的。
最终解决方法
<div v-if="data.param">{{data.param.aaa}}</div>
加一个if判断,就可以了。
vue之各种报错问题
1 、undefined is not iterable!或者null is not iterable!"
null和undefine是不可以拿来循环的,拿来循环就会报上面这个错误,循环的时候判断一下,不为null或者undefine的时候再拿来循环就可以了~~
2、Duplicate keys detected: ‘funs1’. This may cause an update error.
原因: key值不唯一
解决: 仔细检查是否用了同一个数据循环且:key值相同,如果相同给第二个key随便加一个标记就可以,如下:
:key=“index + ‘-only’”
3、报错内容:Maximum call stack size exceeded
这个一般都是路由的堆栈溢出的原因
说白了就是你写了死循环。
比如我的这个代码哈:
/** *ifManager 是否是管理员 *str 是否有用户信息 *在路由跳转之前判断是否是管理员或者是否有用户信息,如果没有就跳转到login页面 */ router.beforeEach((to, from, next) => { if (ifManager || str) { next() } else { next(false); router.push('/login') } }) /** *乍一看好像没有什么问题,但是一运行就会出现上面的那个错误,为什么呢。因为当我们跳到login页面的时候,依旧会判断是否是管理员或者是否有用户信息,就陷入了一个死循环。 * */
解决办法就是:判断条件改一下就可以了
fManager || str|| to.path == '/login'