DOM未使用Vue中的更新内容进行更新

时间:2020-04-19 11:44:43

标签: javascript arrays vuejs2 vuex dom-events

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

内容是具有某些对象的Array格式,通过一些表单输入创建。

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

让我添加一些屏幕截图。

enter image description here

enter image description here

有人可以帮我吗?

让我在项目中添加一些代码。我在代码中使用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);
  },

谢谢。

1 个答案:

答案 0 :(得分:1)

很有可能在DOM加载之后 加载了数据,因为它是嵌套的,因此不会是被动的,因此您不能期望它会更新。

您有几种选择:

1)将v-if放置在阻止数据加载到DOM的位置。

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

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