请教Vue中的v-for循环为什么无论我用什么方法都不更新视图呢?

发布于 2022-09-12 22:38:45 字数 2519 浏览 8 评论 0

代码用的是官方默认helloworld模板
ProductItem一开始是空对象,通过接口赋值给list属性,然后无论我使用this.$set也好,还是通过v-if来渲染,都没效果。
有什么办法解决?

<template>
  <div class="hello">
      456
    <view v-if="sign" v-for="(oItem,index) in ProductItem.list" :key="index" 
                            :id="index" 
                            :data-opid="oItem.id" :data-marketprice="oItem.marketprice" :data-title="oItem.title"
                            :style="oItem.select ? 'background-color: rgba(214, 34, 56, 0.04);border:1px solid #D0021B;font-size:13px;color: #D0021B' : 'background-color: #fff;border:1px solid #999;font-size:13px;color: #333'" 
                            >{{oItem.title}}</view>
                            <button @click="ddd">点击</button>
  </div>
</template>
<script>
import _ from "lodash";
export default {
  name: 'HelloWorld',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App',
      sign:false,
      ProductItem:{}
    }
  },
  mounted(){
  //    let arr = _.chunk(['a', 'b', 'c', 'd'], 3);
  //    console.log(arr)
  },
  methods:{
      ddd(){
          this.$set(this.ProductItem,"list",[
                  {
                      "id":1,
                      "marketprice":100,
                      "title":"test1",
                      "select":false
                  },
                  {
                      "id":2,
                      "marketprice":100,
                      "title":"test2",
                      "select":false
                  },
                  {
                      "id":3,
                      "marketprice":100,
                      "title":"test3",
                      "select":false
                  }
              ])
            /*
          this.ProductItem.list = [
                  {
                      "id":1,
                      "marketprice":100,
                      "title":"test1",
                      "select":false
                  },
                  {
                      "id":2,
                      "marketprice":100,
                      "title":"test2",
                      "select":false
                  },
                  {
                      "id":3,
                      "marketprice":100,
                      "title":"test3",
                      "select":false
                  }
              ];*/
            console.log(this.ProductItem)
              this.sign=true
      }
  }
}
</script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

把人绕傻吧 2022-09-19 22:38:45

ProductItem初始化一个list数组

data () {
    return {
      msg: 'Welcome to Your Vue.js App',
      sign:false,
      ProductItem:{
        list: []
      }
  }
}
眸中客 2022-09-19 22:38:45

控制台应该一进页面就报错了吧,v-for
ProductItem.list 初始值是 undefined

躲猫猫 2022-09-19 22:38:45

view标签是小程序的吧,你换成div就可以正常显示了

愿与i 2022-09-19 22:38:45
  1. ProductItem 应该初始化为 { list: [] }
  2. :key 不要用 index,应该换成对象中的唯一标识字段
  3. 由于有 1,所以不需要 $set,直接 ProductItem.list = ... 就可以了
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文