Я использую простую реализацию, похожую на магазин, в своем приложении vue.js. Я определил магазин следующим образом:
// File: my_store.js
var invoiceDetailStore = {
state: {
selectedInvoiceId: null,
selectedInvoiceDetails: {}
},
setSelectedInvoiceId(selectedId, comp) {
console.log('selectedInvoiceId updated by ' + comp + ' with value ' + selectedId);
this.state.selectedInvoiceId = selectedId;
},
setSelectedInvoiceDetails: (invoiceDetails, comp) => {
console.log('selectedInvoiceDetails updated by ' + comp + ' with value ' + invoiceDetails);
this.selectedInvoiceDetails = invoiceDetails;
},
addSelectedInvoiceDetail: (invoiceDetail, comp) => {
console.log('InvoiceDetail added by ' + comp + ' with value ' + invoiceDetail);
this.selectedInvoiceDetails.push(invoiceDetail);
}
};
export { invoiceDetailStore };
В моем компоненте я импортировал магазин. Когда отслеживаемое свойство изменяется в компоненте, я делаю вызов axios, а затем пытаюсь вызвать метод в хранилище внутри успешного обратного вызова axios, например:
// mycomponent.vue
import { invoiceDetailStore } from '../Shared_State/invoice_detail_store.js';
export default {
data() {
return {
shared: invoiceDetailStore.state,
selectedInvoice: {},
};
},
mounted: function() {
console.log(invoiceDetailStore); // This prints the store properties and functions....
},
watch: {
selectedInvoiceId: function(newValue, oldValue) {
console.log(invoiceDetailStore); // THIS prints undefined
if(newValue !== oldValue) {
axios('my/get/url')
.then(response => {
this.selectedInvoice = response.data.invoice_summary; // it sets the local data property called selectedInvoice
invoiceDetailStore.setSelectedInvoiceDetails(response.data.invoice_details); // .......... invoiceDetailStore is undefined
})
.catch(errorResponse => {
// error actions here
});
}
}
},
}
Как видно из комментариевЯ получаю Cannot read property 'setSelectedInvoiceDetails' of undefined
. Тем не менее, invoiceDetailStore
не является неопределенным внутри установленного крюка.
Может кто-нибудь, пожалуйста, направить в правильном направлении?
Спасибо