-1

解析出来的json对象:

"activity": {
        "num": 0,
        "items": []
    },
    data类数组对象下每个子对象包含一个activity属性

vue循环绑定v-if:

/*html大致就是这样一个结构*/
<ul>
    <li v-for="(item,index) in list">
        ...
        <p v-if="item.activity.num!=0">123</p>
    </li>
</ul>
/*数据结构*/
data:[{
    ...
    "activity": {
        "num": 0,
        "items": []
    },
},
{
    ...
    "activity": {
        "num": 0,
        "items": []
    },
}
]

v-if="item.activity.num"//这里就会报错


//vue.js:491 [Vue warn]: Error in render: "TypeError: Cannot read property 'num' of undefined"

//(found in <Root>)


what FFFFFFF!

最神奇的是我直接在js中获取:

var a = vm.list[0].activity.hasOwnProperty("items"); 
                                console.log(a);//true
//或者
console.log(vm.list[0].activity.num);//0
//可以看出来是能够正常获取到的
                                

如上注释,明明是可以获取到的属性,为何循环时条件渲染会报错?
请大神赐教!

5个回答

1

你得好好看看教程。。。
如果你没有事先定义 data 的属性
比如你这里的 data.list
那么 你后面再 vm.list = listFromAPI
Vue 是不能检测对象属性的添加或删除的

https://cn.vuejs.org/v2/guide...

https://cn.vuejs.org/v2/guide...

0

你的截图看不到。。
猜测
你的数据是请求回来的,所以组件一开始渲染的时候数据没有回来导致报错


看到了,num不能在undefined上那个。很明显了。你的activity是没有存在在item上的。你仔细看下代码,执行v-if的item.activity.num时候,确保activity在item上

0

可否把代码贴完整 这个item 是在哪v-for 出来的 v-for的哪个数据

你这data定义是一个数组 你就循环data可好 list 哪来的

0

多半是异步取数据的问题,你这问题就这点代码不好回答啊

0

看不全 。也是猜测

v-if="item.activity.num"//这里就会报错

var a = vm.list[0].activity.hasOwnProperty("items"); 
                                console.log(a);//true
//或者
console.log(vm.list[0].activity.num);//0

你上面写的是item.activity.num 但是下面写的是vm.list[0].activity.num 数据没有对应 不知道你v-if上面是不是有v-for循环 建议把问题部分贴全

撰写答案