为了账号安全,请及时绑定邮箱和手机立即绑定

有没有童鞋遇到过同样的问题:vue methods触发条件谢谢哈~

有没有童鞋遇到过同样的问题:vue methods触发条件谢谢哈~

MMMHUHU 2019-08-17 20:49:17
在做商城时出现了一个问题,自己写了个demo复现代码html{{currentFlag(item.flag)}}刷新数据刷新数据2scriptname:"",data(){return{shopCartList:[]}},methods:{currentFlag(flag){console.log('该方法被执行')return"111"+flag},refresh(){//数据请求getTestList().then(reobj=>{this.shopCartList=reobj})},refresh2(){//数据请求getTestList().then(reobj=>{this.shopCartList.forEach((item,index)=>{reobj.forEach((item1,index1)=>{if(index==index1){item.flag=item1.flag}})})})}},created(){this.refresh()}现在问题就是,为什么点第一个按钮,直接将请求回来的数据赋给shopCartList,methods里的currentFlag()方法就会被触发,点第二个按钮将请求回来的数据遍历赋值就不会触发currentFlag(),除非遍历的时候手动调用
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

点第一个按钮,直接将请求回来的数据赋给shopCartList,数据发生了改变,所以重新渲染,循环运行currentFlag方法。
点第二个按钮将请求回来的数据遍历赋值:这里你两个方法中的getTestList获取的数据应该是相同的,即shopCartList与reobj对应项的flag值是相同的,这样数据没有发生改变,所以不会重新渲染。
另外,方法二的这个赋值太没必要,性能差,代码多,就是这样写,单层循环也够了
reobj.forEach((item,index)=>{
letre=this.shopCartList[index]
re&&(re.flag=item.flag)
})
                            
查看完整回答
反对 回复 2019-08-17
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

你所遇到的问题涉及到数组渲染;
refresh2方法shopCartList的更新,Vue不能检测到;而refresh方法的更新,Vue能检测到,会重新渲染,对应的就会触发currentFlag方法
数组更新检测
                            
查看完整回答
反对 回复 2019-08-17
  • 2 回答
  • 0 关注
  • 235 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号