Когда я использую this.$router.push("/history/" + fileid);
из моего Home.vue
до go в History.vue
, я делаю запрос created
или mounted
a socket.io
, который содержит много данных и рендеринг с v-for
занимает не менее 2/3 se c.
Home.vue
не исчезает, пока 2/3 se c, а затем мы видим, что History.vue
появляется под пришло время получения данных.
Есть ли способ заставить Home.vue
исчезнуть напрямую?
Редактировать : Ajax
был заменен на socket.io
во время процесс.
Edit2: На самом деле «много данных» - это всего 300 элементов, запрос действительно мгновенный.
Моя созданная функция:
created: function() {
console.log("------------ HISTORY -----------");
let state = this.$store.state;
if (state.socket.io._callbacks["$history"] != undefined) {
state.socket.io.off("history");
}
console.log("Binding history");
state.socket.io.on("history", data => {
if (data.success) { //if everything is alright
//For each item in the data.history I will stock them in a total_history array
data.history.map(h => {
h.internalid = internalid++; //key for v-for
h.histtype = 0; //history
this.total_history.push(h); //add it to the total array
});
//For each item in the data.lock_history I will stock them in the total_history array
data.lock_history.map(h => {
h.internalid = internalid++; //key for v-for
h.histtype = 1; //lock
this.total_history.push(h); //add it to the total array
});
//foreach item (300) I convert the datetime string to a Datetime Object
this.total_history.map(t => {
t.datetime = new Date(t.datetime);
});
}
});
//Send a request to get the function above exec on response from server
let fileid = this.$route.params.fileid;
fileid = parseInt(fileid); //get url param
if (typeof fileid == "number") {
console.log("get history: " + fileid);
state.socket.io.emit("history", { //send the request to get history
user: state.user.name,
token: state.user.token,
document_id: fileid
});
}
}