javascript - VueJS - 事件发出 - 在其他计算之前显示 HTML

标签 javascript vue.js

想要:

发出事件时显示 HTML 元素,并在显示元素后运行一些计算。

但是:

HTML 元素仅在计算运行后显示。

奇怪:

控制台显示事件回调在计算之前运行。

let app = new Vue({
  el: '#app',
  data: {
    show: false
  },

  methods: {
    showCallback() {
      console.log('showCallback');
      console.log(this.show);
      this.show = true;
      console.log(this.show);
    },
    
    start() {
      this.$emit('loading-show');

      console.log('Calculation start');

      // Do some calculations
      for (let i = 1; i < 10000000000; i++) {}

      console.log('Calculation finish');
    }
  },

  mounted() {
    this.$on('loading-show', this.showCallback);
  },

  destroyed() {
    this.$off('loading-show', this.showCallback);
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <button @click="start">Start</button>
  <h1 v-show="show">Shown</h1>
</div>

最佳答案

  1. 您不应在测试中使用 for 循环,而应使用 setTimeout。否则您的 UI 将不会更新。

  2. 使用 v-ifv-else-ifv-else 根据您的状态显示 HTML .

let app = new Vue({
  el: '#app',
  data: {
    show: false,
    done: false,
    
    showCallback: function() {
      console.log('showCallback');
      console.log(this.show);
      this.show = true;
      console.log(this.show);
    }
  },

  methods: {
    start() {
      this.done = false
      this.$emit('loading-show');

      console.log('Calculation start');

      // Do some calculations
      setTimeout(()=>{
        this.done = true
        console.log('Calculation finish');}, 2000)      
    }
  },

  mounted() {
    this.$on('loading-show', this.showCallback);
  },

  destroyed() {
    this.$off('loading-show', this.showCallback);
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <button @click="start">Start</button>
  <h1 v-if=!show>Press Start</h1>
  <h1 v-else-if="!done">Processing</h1>
  <h1 v-else>Shown</h1>
</div>

关于javascript - VueJS - 事件发出 - 在其他计算之前显示 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57536336/

相关文章:

webpack - Vue.js ready() 方法不会在 vue 组件中被调用

javascript - 在表格内分隔 D3 饼图

javascript - 页面重新加载时的 Webpack 警告

javascript - css 上的子菜单悬停菜单问题

javascript - javascript 中 Date 构造函数中字符串 "0"到 "110"的字符串解析背后的逻辑是什么?

javascript - Vuetify 选择默认值

javascript - Vue.js动态挂载单文件组件

javascript - 将本地化添加到 vue-tables2 表

javascript - Jquery C# 中的数据集值

javascript - 不熟悉的调用方括号中的函数