Наиболее вероятной причиной является то, что null
является только начальным значением. Загрузка данных выполняется асинхронно, поэтому вам нужно подождать, пока загрузка завершится, прежде чем пытаться создать какие-либо компоненты, основанные на этих данных.
У вас есть флаг isLoading
, который, как я полагаю, является вашей попыткой дождаться завершения загрузки, прежде чем показывать какие-либо компоненты (возможно, через подходящий v-if
). Однако в настоящее время он ожидает только первый запрос, а не второй. Итак, это:
this.$axios.get(configurationService.address + "/api/v1/clientConfiguration").then(
response2 => {
this.$clientConfiguration = response2.data;
}
);
this.isLoading = false;
должно быть:
this.$axios.get(configurationService.address + "/api/v1/clientConfiguration").then(
response2 => {
this.$clientConfiguration = response2.data;
this.isLoading = false;
}
);
Если проблема не в этом начальном значении, вам нужно выяснить, что его устанавливает на null
. Это должно быть очень просто, просто вставьте оператор debugger
в свой установщик:
$clientConfiguration: {
get: function () { return globalData.$data.$clientConfiguration },
set: function (newConfiguration) {
if (!newConfiguration) {
debugger;
}
globalData.$data.$clientConfiguration = newConfiguration;
}
}
Помимо проблемы с null
, если вы используете Vue 2.6+, я бы посоветовал взглянуть на Vue.observable
, который является более простым способом создания реактивного объекта, чем создание нового экземпляра Vue.
Лично я, вероятно, реализовал бы все это, поместив реактивный объект в Vue.prototype
вместо использования глобального миксина. Это предполагает, что вам даже нужно, чтобы объект был реактивным, а если нет, то все это несколько сложнее, чем нужно.