当前位置: 首页 > 知识库问答 >
问题:

Vuejs DOM在获取数据后不更新

凤修筠
2023-03-14

我已将数组事件绑定到组件标签

我使用了2个vue文件:包含主端组件的pp.vue和包含调度程序组件的Scheduler.vue文件。

问题是,当我在调度程序中修改某些内容时。vue文件并保存,它会正确地考虑更新的事件数组。当DOM安装在调度程序组件中时,调度程序解析事件属性中的数据。

因此,我可以做些什么来获得更新的阵列吗?

这是应用程序。vue:

<template>
  <div id="app">
    <div class="container">
      <scheduler v-bind:events="events"></scheduler>
    </div>
  </div>
</template>

<script>
import Scheduler from './components/Scheduler.vue';
import auth from './components/auth/index'
import data from './components/data/index'

export default {
  name: 'app',
  components: {
    Scheduler
  },
  data() {
    return {
      events: []
    }
  },
  created() {
    this.getEvents();
  },
  watch: {
    events: function(value) {
      console.log('updated');
    }
  },
  methods: {
    async getEvents() {
      try {
        const token = await auth.getToken(this);
        const thattoken = await auth.getThatToken(this, token);
        await data.getOgustData(this, token, '/calendar/events', 307310564, this.events);
      } catch (e) {
        console.log(e);
      }
    },
  }
}
</script>

这里是Scheduler.vue:

<template lang="html">
  <div ref="scheduler_here" class="dhx_cal_container" style='width:100%; height:700px;'>
    <div class="dhx_cal_navline">
      <div class="dhx_cal_prev_button">&nbsp;</div>
      <div class="dhx_cal_next_button">&nbsp;</div>
      <div class="dhx_cal_today_button"></div>
      <div class="dhx_cal_date"></div>
      <div class="dhx_cal_tab" name="day_tab" style="right:204px;"></div>
      <div class="dhx_cal_tab" name="week_tab" style="right:140px;"></div>
      <div class="dhx_cal_tab" name="month_tab" style="right:76px;"></div>
    </div>
    <div class="dhx_cal_header"></div>
    <div class="dhx_cal_data"></div>
  </div>
</template>

<script>
import 'dhtmlx-scheduler'
import 'dhtmlx-scheduler/codebase/locale/locale_fr';
import 'dhtmlx-scheduler/codebase/ext/dhtmlxscheduler_readonly.js';

export default {
  name: 'scheduler',
  props: {
    events: {
      type: Array,
      default () {
        return [{
          id: '',
          text: '',
          start_date: '',
          end_date: '',
        }]
      }
    }
  },
  mounted() {
    scheduler.config.xml_date = '%Y-%m-%d %H:%i';
    // disable left buttons on lightbox
    scheduler.config.buttons_left = [];
    // enable cancel button on lightbox's right wing
    scheduler.config.buttons_right = ['dhx_cancel_btn'];
    // changing cancel button label
    scheduler.locale.labels['icon_cancel'] = 'Fermer';
    // hide lightbox in month view
    scheduler.config.readonly_form = true;
    // hide select bar in day and week views
    scheduler.config.select = false;
    scheduler.config.lightbox.sections = [
      {
        name: "description",
        height: 20,
        map_to: "text",
        type: "textarea",
        focus: true
      }
    ];

    scheduler.init(this.$refs.scheduler_here, new Date(), 'month');
    scheduler.parse(this.$props.events, 'json');
  },
}
</script>

<style lang="css" scoped>
  @import "~dhtmlx-scheduler/codebase/dhtmlxscheduler.css";
</style>

共有2个答案

利俊迈
2023-03-14

问题解决了。问题不是来自Vue,而是来自dhtmlx调度程序,当更新事件时,dhtmlx调度程序没有解析事件。

我最终观察了events的任何更改,因此在它更新时解析它。

再次感谢您提供的帮助。

pp.vue:

<template>
  <div id="app">
    <div class="container">
      <scheduler v-bind:events="events"></scheduler>
    </div>
  </div>
</template>

<script>
import Scheduler from './components/Scheduler.vue';
import auth from './components/auth/index'
import data from './components/data/index'
import 'dhtmlx-scheduler'

export default {
  name: 'app',
  components: {
    Scheduler
  },
  data() {
    return {
      events: []
    }
  },
  created() {
    this.getEvents();
  },
  watch: {
    events: function(value) {
      scheduler.parse(this.events, 'json');
    }
  },
  methods: {
    async getEvents() {
      const token = await auth.getToken(this);
      const apiToken = await auth.getApiToken(this, token);
      this.events = await data.getApiData(this, apiToken, '/calendar/events', 307310564, this.events);
    }
  },
}
</script>
艾望
2023-03-14

无法以Vue可以观察到的方式填充事件。由于您将其作为参数传递,因此可以更新数组本身,但它不是被动数组。尝试

var newEvents;
await data.getOgustData(this, token, '/calendar/events', 307310564, newEvents);
this.events = newEvents;

分配给this.events是Vue可以注意到的。

 类似资料:
  • 我有这部分代码: 现在想返回插入或更新的数据作为响应,但是在谷歌上看到很多帖子后,所有尝试都失败了,我怎么能这样做?没有上次插入的id 但返回布尔值: 如何在雄辩的ORM laravel最后插入id 大多数主题想要返回,但我想要所有数据。

  • 各位早上好,, 我刚完成React的培训,我想做一个项目来练习。首先,我只是在firebase数据库中发布数据。然后,我想使用钩子(useState和useEffect)获取数据并将其显示在react组件中。 问题是,在使用axios获取数据后,我最终陷入了经典的无限循环陷阱,但我不知道如何使用依赖性来阻止它。 请查找以下代码: 当我使用控制台日志类型时,数据是正确的。但当我控制台记录fetche

  • 我有一个使用redux的应用程序 我也曾在本地获取数据。 在我的反应组件中,我使用来获取数据。但我什么也没得到。 如何在我的组件中获取数据? 演示:https://codesandbox.io/s/nervous-rosalind-lp16j?file=/src/App.js:242-328

  • 问题内容: 我正在尝试使用包含Latex样式方程式的AngularJS双向绑定文本。我想调用MathJax格式化方程式,但是我不确定在AngularJS完成更改模型后确保调用MathJax的最佳方法。我想我需要回调。这是我的JavaScript: } 这是我的HTML: 小提琴在这里:http : //jsfiddle.net/LukasHalim/UVjTD/1/。您会注意到,即使您单击两次更新

  • 我有一个页面“/order/new”,它包括两个客户及其地址的下拉菜单和一个重定向选择要添加到订单中的产品的按钮,我在一个数组中获得产品,并将该数组传递给“/order/new”。但是当我重定向时,我没有获得选定的客户及其地址。我将按顺序添加的产品保存在全局数组hh中,它从ajax获得数据 我想在添加产品数组后获取客户及其地址 我的ajax代码: “/new/order”得我得ejs:

  • 我正在从ListView迁移到RecyclerView,但是在SQLite中输入一些数据之后,我的列表没有使用notifyDataSetChanged()更新;所以我总是必须调用setAdapter()方法; 回收器ViewAdapter 观赏者 模型