问答

Vue 混入mixins的created优先级,异步问题?

作者:admin 2021-04-18 我要评论

Q:大致代码如下,问题都写在注释里了。 import formOperate from '@/layout/mixin/formOperate'// 混入的formOperate方法里的created生命周期会执行一个getList...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

Q:大致代码如下,问题都写在注释里了。

import formOperate from '@/layout/mixin/formOperate'
// 混入的formOperate方法里的created生命周期会执行一个getList方法,就是携带queryParam去后端请求数据列表。
export default {
  mixins: [formOperate],
  // ...
  created() {
    const dictId = this.$route.params && this.$route.params.id
    // 直接在下面这行赋值,页面在首次进入的时候混入的getList有携带这个值去请求后端
    // this.queryParam.dict_type = 'test'
    
    // 但是在下面这方法里,请求后端后赋值,混入的getList就没有携带这个参数,是因为异步同步什么之类的吗?
    this.getType(dictId)
  },
  methods: {
    getType(dictId) {
      this.$http.get('dictTypes/' + dictId).then(response => {
        this.queryParam.dict_type = response.data.dict_type
      })
    }
  }
}
我就是想在页面执行的时候先请求后端然后给queryParm赋值,然后混入的getList携带这个参数去请求后端,应该怎么改呢?
###

这种情况减少麻烦就直接把mixins的东西放到这个页面把,不然你无法保证created里面哪个请求先后执行。

###

vue官方文档有这么一句话:

另外,混入对象的钩子将在组件自身钩子之前调用。

也就是说你mixins中的create的getList已经在getType之前先执行了。

我觉得可以这么做

你在formOperate中定一个方法,像这样:

export default () {
    methods: {
        getList() {
            // do something
        }
    }
}

在你要用到getList时,直接在当前组件this.getList()就好了。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器