【问题标题】:DOM is not updating with updated content in VueDOM 未使用 Vue 中的更新内容进行更新
【发布时间】:2020-04-19 11:44:43
【问题描述】:

我是一个在 Vue 中创建应用程序的人。我在通过事件总线显示更新内容时遇到问题。我也尝试将 vuex 用于本地内容,但它仍然显示相同的问题。

内容是数组格式,有一些对象,通过一些表单输入创建。

控制台正在显示更新的内容,但更新的内容未显示在 DOM 上。

让我添加一些屏幕截图。

谁能帮帮我??

让我在我的项目中添加一些代码。我在代码中使用 Vue Materail。

模板 1

<md-select v-model="bedroom" name="bedroom" id="bedroom" @md-selected="getBedVal('bedroom', 10)">
                            <md-option value="1">1</md-option>
                            <md-option value="2">2</md-option>
                            <md-option value="3">3</md-option>
                            <md-option value="4">4</md-option>
                            <md-option value="5">5</md-option>
                            <md-option value="6">6</md-option>
                            <md-option value="7">7</md-option>
                            <md-option value="8">8</md-option>
                            <md-option value="9">9</md-option>
                            <md-option value="10">10</md-option>

                        </md-select> 

组件 1:-

methods: {
    ServiceInfoFun: function(obj){
      var existingIds = this.getServiceInfo.map((obj) => obj.servicename);
      if (!existingIds.includes(obj.servicename)) {
        this.getServiceInfo.push(obj);
          bus.$emit('extraservice', this.getServiceInfo);
          //this.$store.dispatch('serviceListAction', this.getServiceInfo)
      } else {
        this.getServiceInfo.forEach((element, index) => {
          if (element.servicename === obj.servicename) {
              this.getServiceInfo[index] = obj;
              // this.$store.dispatch('serviceListAction', this.getServiceInfo); 
              bus.$emit('extraservice', this.getServiceInfo);
          };
        });
      };
    },
    getBedVal: function(name, price){ 
      var obj = {
        servicename: name,
        serviceprice: price * this.bedroom,
        serviceqty : this.bedroom
      }
       this.ServiceInfoFun(obj);
    },
  }

模板 2

{{ serviceInfo }}

组件 2:

  created(){
    bus.$on('extraservice', (data) => {
        this.serviceInfo = data;
        console.log(this.serviceInfo);
  },

提前致谢。

【问题讨论】:

  • 请发布您的代码。在没有抛出此错误的运行代码的情况下帮助您是一种痛苦
  • ok .. 让我添加一些代码。
  • 我添加了几行代码,我的朋友。
  • 你能发布应该呈现代码的模板吗?我试着解决它
  • 我还在代码中添加了模板。请看一看。

标签: javascript arrays vuejs2 vuex dom-events


【解决方案1】:

您的数据很可能是在加载 DOM 之后 加载的,因为它是嵌套的,它不会是反应式的,因此您不能指望它会更新。

你有几个选择:

1) 在某处放置一个 v-if,以防止在数据到位之前加载 DOM。

2) 手动强制重新加载,我的首选方法是提供密钥并更改密钥。详细示例请参见此处:https://michaelnthiessen.com/force-re-render/

注意:详细说明一下,如果您在 PROPS 中获取数据,那么如果在某个生命周期中说“已创建”,那么它来得相当早,那么 DOM 肯定会首先加载。

【讨论】:

  • 嗨@Michael,它不工作..你能创建一个例子吗?
  • 我需要查看您的模板 2 才能更具体,这是没有更新数据的地方吗?
  • 嗨 @Michael,在模板 2 中,我使用了这个 {{ serviceInfo }} 并在创建时获取了发出的数据。 created(){ bus.$on('extraservice', (data) => { this.serviceInfo = data; console.log(this.serviceInfo); },
  • 所以在周围的元素上放一个键并在上面的函数内更改(+1)。
  • 我做了一个计数器并修改它,从其他组件获取数据。现在它工作正常。谢谢你。你是个天才 。再次感谢。爱你。 :)
猜你喜欢
  • 2023-03-22
  • 2018-05-06
  • 2014-12-28
  • 1970-01-01
  • 2021-12-11
  • 2019-01-11
  • 2021-05-09
  • 2018-01-12
  • 1970-01-01
相关资源
最近更新 更多