我正在尝试使用api rest命令设置我的组件变量。我想通过一个名为handleResponse()的文件中的函数来处理所有响应,该文件位于下面。
// api/tools/index.js
function handleResponse (promise, cb, cbError) {
var cbErrorRun = (cbError && typeof cb === "function")
promise.then(function (response) {
if (!response.error) {
cb(response)
}
else if (cbErrorRun) {
cbError(response)
}
}).catch(function (error) {
console.log(error)
if (cbErrorRun) {
var responseError = {
"status": 404,
"error": true,
"message": error.toString()
}
cbError(responseError)
}
})
}
export {handleResponse}
在我的组件文件中,我有这个
.... More above....
<script>
import { fetchStock } from '@/api/stock'
export default {
data () {
return {
stock: {},
tabs: [
{
title: 'Info',
id: 'info'
},
{
title: 'Listings',
id: 'listings'
},
{
title: 'Company',
id: 'company'
}
],
}
},
validate ({params}) {
return /^\d+$/.test(params.id)
},
created: function() {
var params = {'id': this.$route.params.stockId}
//this.$route.params.stockId}
fetchStock(
params,
function(response) { //on successful data retrieval
this.stock = response.data.payload // payload = {'name': test123}
console.log(response)
},
function(responseError) { //on error
console.log(responseError)
}
)
}
}
</script>
当前代码给出了这个错误:&#34;未捕获(在承诺中)TypeError:无法设置属性&#39; stock&#39; of undefinedAc&#34;。我认为这是因为我无法再访问这个&#39;在回调中我传入fetchStock函数。如何在不更改当前handleResponse布局的情况下解决此问题。
答案 0 :(得分:4)
你可以尝试这个技巧
created: function() {
var params = {'id': this.$route.params.stockId}
//this.$route.params.stockId}
var self = this;
fetchStock(
params,
function(response) { //on successful data retrieval
self.stock = response.data.payload // payload = {'name': test123}
console.log(response)
},
function(responseError) { //on error
console.log(responseError)
}
)
}
答案 1 :(得分:0)
您可以使用箭头函数进行回调,因为箭头函数可以维护并使用其包含范围的this
:
created: function() {
var params = {'id': this.$route.params.stockId}
//this.$route.params.stockId}
fetchStock(
params,
(response) => { //on successful data retrieval
self.stock = response.data.payload // payload = {'name': test123}
console.log(response)
},
(responseError) => { //on error
console.log(responseError)
}
)
}
或者您可以像这样在回调之前在方法的开头分配const vm = this
。
vm代表“视图模型”
created: function() {
var params = {'id': this.$route.params.stockId}
//this.$route.params.stockId}
const vm = this;
fetchStock(
params,
function(response) { //on successful data retrieval
self.stock = response.data.payload // payload = {'name': test123}
console.log(response)
},
function(responseError) { //on error
console.log(responseError)
}
)
}
我建议在
const
声明中使用var
而不是vm
,以使vm
的值很明显。