【问题标题】:Running a function in a VueJs 2 component once its loaded加载后在 VueJs 2 组件中运行函数
【发布时间】:2016-12-13 15:32:58
【问题描述】:

组件安装后如何获取数据?
我启动我的 vue 实例,然后加载组件,组件模板加载正常,但 mount 中的函数调用从未运行,因此 stats 对象保持为空,进而导致需要数据。

那么如何在组件加载时运行某个功能?

不管它的价值...我想调用的函数都会发出 REST 请求,但每个组件都会运行不同的请求。

Vue.component('homepage', require('./components/Homepage.vue'), {
  props: ["stats"],
  mounted: function() {
    this.fetchEvents();
    console.log('afterwards');
  },
  data: {
    loading: true,
    stats: {}
  },
  methods: {
    fetchEvents: function() {
      this.$http.get('home/data').then(function(response) {
        this.stats = response.body;
        this.loading = false;
      }, function(error) {
        console.log(error);
      });
    }
  }
});

const vue = new Vue({
  el: '#main',
  mounted: function() {
    console.log('main mounted');
  }
});

【问题讨论】:

标签: javascript vue.js vuejs2


【解决方案1】:

通过将所有初始化内容放入mounted,您已经做得很好了。您的组件没有刷新的原因可能是因为绑定了this,如下所述:

在您的fetchEvents 函数中,您的$http 成功处理程序提供了一个响应,您正试图将其分配给this.stats。但它失败了,因为 this 指向该匿名函数范围,而不是 Vue 组件。

要解决这个问题,您可以使用如下所示的箭头函数:

fetchEvents: function() {
  this.$http.get('home/data').then(response => {
    this.stats = response.body;
    this.loading = false;
  }, error => {
    console.log(error);
  });
}

箭头函数不会在内部创建自己的作用域或this。如果你在如上所示的箭头函数中使用this,它仍然指向Vue组件,因此你的组件将更新它的数据。

注意:即使是错误处理程序也需要使用箭头函数,以便您可以使用this(Vue 组件的)进行任何错误记录。

【讨论】:

  • mounted: 在组件中似乎根本没有触发,我尝试做一个简单的 console.log 甚至另一个调用警报的函数,但它们都没有触发。似乎加载组件时它没有调用挂载函数列表中的任何内容。
  • 你能检查一下这个 jsFiddle 示例吗:jsfiddle.net/mani04/0gsq2ez1 - 这里mounted 被触发,你可以在控制台中看到消息。您确定您使用的是 Vue 2.x 最新版本吗?而且,我不知道你想用 require('./components/Homepage.vue') 做什么,到目前为止我从未遇到过这种类型的用法或要求。
  • 我只是按照 Laravel 中的代码来调用组件,看看这里:github.com/laravel/laravel/blob/master/resources/assets/js/…
  • 在该示例中,组件定义完全包含在 ./components/example.vue (link to example.vue) 中。但在您的情况下,您尝试在链接到Homepage.vue 之后再次直接提供定义。您必须提供对组件 vue 文件的引用,或者直接提供组件定义,如我的 jsFiddle 示例所示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 2020-06-20
  • 2018-03-25
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多