#javascript #vue.js #vuejs3 #vue-directives #vue-slot
Вопрос:
Я столкнулся с проблемой перехвата innerHTML после вызова API с использованием Axios в Vue js.
вот мой HTML-код
<div id="vue-app">
<div id="sourceText" style="display: none" v-html="`${reqData}`"></div>
</div>
Я использовал «v-html», потому что мои запрошенные данные имеют формат HTML.
Вот мои vue.js сценарии
var vueApp = new Vue({
el: '#vue-app',
data(){
return{
reqData: null,
}
},
methods:{
getStory:function () {
axios
.get('https://api.coindesk.com/v1/myApi')
.then((response) => (this.reqData = response.data.content))
.catch((error) => console.log('error SMS', error));},
},
activate: function () {
var sourceText = document.getElementById('sourceText').innerHTML;
this.line_array = sourceText.split(this.line_spliter);
}
},
beforeMount() {
this.activate();
console.log('beforeMount', document.getElementById('sourceText'));
},
mounted() {
this.getStory();
console.log('mounted', document.getElementById('sourceText'));
},
})
до этого все работает хорошо, но когда я пытаюсь получить innerHTML из sourceText в activate
функция у него не работает.
Я утешился в обеих функциях, результат показывает
beforeMount <div id="sourceText" style="display: none" v-html="`${reqData.content}`"></div>
mounted null
Результат должен выглядеть так:
<div id="sourceText" style="display:none">
<p>Lorem ipsum dolor sit.</p>
<p>Lorem ipsum dolor sit.</p>
<p>Lorem ipsum dolor sit.</p>
<p>Lorem ipsum dolor sit.</p>
</div>
Я хотел бы обнаружить элемент p внутри тега div
Комментарии:
1.
this.getStory();
срабатывает сразу, но вызов axios является асинхронным. это означает, что он завершится когда-нибудь в будущем. Функция по-прежнему завершается как обычно, и выconsole.log(...)
запускаетесь немедленно. Асинхронный код еще не завершен, поэтому, конечно, он равен нулю. Вы должны либо запустить свой код в асинхронном обратном вызове (.then(()=>{...HERE...})
), либо вернуть все обещание, чтобы вы могли использоватьthen
илиawait
позже2. @ippi Спасибо, это асинхронная проблема. Я разгадал ее!!!
Ответ №1:
Вам нужно дождаться ответа, попробуйте:
async getStory() {
await axios
.get('https://api.coindesk.com/v1/myApi')
.then((response) => (this.reqData = response.data.content))
.catch((error) => console.log('error SMS', error));},
},
async mounted() {
await this.getStory();
},