最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Vue视图未更新再次踩坑

    正文概述 掘金(Daotin)   2021-01-07   450

    今天遇到一个Vue数据更新了,但是视图未更新的问题,折腾了我2小时才搞定,有必要记录下来,防止日后再次踩坑。

    问题描述

    我需要显示一个列表,而且列表是可编辑的。比如可以修改列表每一项的名称等。

    我从后端获取列表后,对其中的每一项数据进行初始化,增加一个editing 可编辑属性。

    me.groupList.forEach(item=>{
        item.editing = false;
    });
    

    之后在模板中使用v-for遍历groupList,然后每个item增加一个icon,点击icon后,修改editing的状态,根据editing的状态显示item的名称或者input标签。

    但是在我操作的时候,发现使用Vue.set 也无法使得页面更新,加上this.$forceUpdate() 之后才可以。

    menuEdit(menu) {
        this.$set(menu, 'editing', true);
        console.log('edting----->', menu.editing); // 可以打印出来数据已经更新
        // this.$forceUpdate(); // 加上视图才会更新
    },
    

    按照以往的经验,只有直接赋值的时候editing=false,才会数据更新,但是视图未更新,但是我现在已经使用了this.$set 了,为何还是如此?

    于是只能借助搜索引擎了。

    在网上搜寻的过程中,我发现了有人问,为什么数据更新了,但是Vue Devtools中的数据未更新?

    链接如下:

    • stackoverflow.com/questions/4…
    • stackoverflow.com/questions/4…
    • github.com/vuejs/vue-d…

    其实,如果页面上没有任何可响应的内容,也就是页面未使用响应式的数据,或者使用了非响应式的数据,那么数据将无法在Vue Devtools中实时更新,但是你可以点击工具的刷新按钮,这时候可以看到数据进行了更新。

    小插曲完。

    问题解决

    就在我一筹莫展的时候,我突然发现,最开始初始化的时候的editing 是直接赋值的,我当时一个激灵就知道,问题就在这里。

    me.groupList.forEach(item=>{
        this.$set(item, 'editing', false);
    });
    

    改成上面代码后,问题迎刃而解。

    总结

    • 问题是个小问题,也是我知道的问题。只是没想到它在最根源的地方犯了错,后面即使正确操作,也是于事无补。
    • 要相信,当使用this.$forceUpdate() 的时候,99%的情况都是自己错了。
    • 如果页面未使用响应式的数据,或者使用了非响应式的数据,Vue DevTools的数据是不会更新的。

    起源地下载网 » Vue视图未更新再次踩坑

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元