あなたはすでに私の他の答えを受け入れてきたが、私は、以下に説明するようにコードは、大幅に向上させることができると思う:
両方がDOMを変更すると一般的に、Vue.js
でjQuery
を混在しないことをお勧めします:
を
フロントエンドの問題をデバッグするのに多くの時間を費やしてしまいます。これは、ビジネス要件から離れたところです。また、Vue.js
には最新のブラウザが既に必要なため、技術的にはjQuery
はブラウザの互換性のためにあまり効果がありません。
あなたが背後jQuery
を出るまで開いているのであれば、ここでもう一つの方法は次のとおりです。
getDelayedData() {
// Create a new Promise and resolve after 2 seconds
var myTimerPromise = new Promise((resolve, reject) => {
setTimeout(() => {
// callback function for timer, gets called after the time-delay
// Your timer is done now. Print a line for debugging and resolve myTimerPromise
console.log("2 seconds up, resolving myTimerPromise")
resolve();
}, 2000); // This promise will be resolved in 2000 milli-seconds
});
// Start displaying ajax spinner before fetching data
this.displaySpinner = true;
// Fetch data now, within Promise.all()
Promise.all([myTimerPromise, this.getPosts(), this.getSliders()]).then(() => {
// Hide the spinner now. AJAX requests are complete, and it has taken at least 2 seconds.
this.displaySpinner = false;
console.log("Data fetched for sliders and posts");
});
}
上記のコードはまたあなたのAjaxスピナーを活性化したり無効にしている、this.displaySpinner
を持っている必要があります。あるいは、他のやり方をしているかもしれません。
さらに、getPosts
とgetSliders
の方法からはreturn this.$http.get(..)
が必要です。
注:上記のコードはテストしていません。必要に応じてデバッグする必要があります。
getDelayedData() {
// Create a new Promise and resolve after 2 seconds
var myTimerPromise = new Promise((resolve, reject) => {
setTimeout(resolve, 2000); // "resolve" is already a function, no need for another anonymous function here
});
// and do the other stuff here...
}
が、私はこの方法を好むだろう:それは作業を開始したら、次のようにhttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
、あなたがmyTimerPromise
を簡素化することができます:それは、このリファレンスドキュメントで与えられるPromise.all()の私の理解に基づいて、動作するはずですそれはjQuery
を避けるためです。それで私のVue.js
アプリは、gzipされた30 KBの小さなものになることがあります。逆にjQuery
をバンドルすると、100 KBを超えることができます。
あなたの 'function timer(){...}'は、内部に新しいスコープを作成しています。だから、技術的に 'this.getPosts()'と 'this.getSliders()'は 'timer'関数の中で動作すべきではありません。どこでも習慣として[arrow functions](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions)を使う必要があるかもしれません。 – Mani