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()
就好了。