Контекст потеряли. Так что this в then/catch - это не экземпляр компонента, а window (или undefined - в строгом режиме).
Используйте стрелочную функцию:
.then((response) => {
this.loading = false;
console.log(response);
})
Или bind:
.then(function(response) {
this.loading = false;
console.log(response);
}.bind(this))
Или сохраняйте контекст в переменную перед запросом:
var that = this;
axios.post('/comment', {
text: this.com_text,
}).then(function(response) {
that.loading = false;
console.log(response);
})
Или сделайте метод асинхронным и вместо then используйте await:
methods: {
async add_comm() {
this.loading = true;
try {
var response = await axios.post('/comment', {
text: this.com_text
});
console.log(response);
} catch(error) {
console.error(error);
}
this.loading = false;
}
}
Или вынесите код коллбеков в отдельные методы (vue самостоятельно привязывает контекст к методам):
methods: {
add_comm() {
this.loading = true;
axios.post('/comment', {
text: this.com_text
})
.then(this.onResponse)
.catch(this.onError)
.finally(this.onFinal);
},
onResponse(response) {
console.log(response);
},
onError(error) {
console.error(error);
},
onFinal() {
this.loading = false;
}
}