2017-10-31 9 views
2

私は、私のVueアプリで、完了するまでにある程度の時間(約2〜3秒)がかかる機能を持っています。 ではなく、でAJAX呼び出しです。ロング(非AJAX)機能のインジケータをロードしていますか?

このコードの実行中にローディングインジケータを含めたいと思いますが、問題が発生しています。私は次のことができると思った...

<div v-on:click="doThings()">{{stuff}}</div> 

methods: { 
    doThings: function() { 

     this.loading = true 
     console.log(this.loading) 

     longFunction() 

     this.loading = false 
     console.log(this.loading) 

    }... 
} 

...しかしそれは動作しません。 doThings()はlongFunction()が終了するまで何も実行していないようです。私は別の機能を作り、ボタンを変えてこのような2つの機能を実行しようとしました...

...しかしこれも動作しません。私がしようとしていることは可能ですか?

+0

https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers – aaaaaa

+0

これを達成する唯一の方法はありますか?別のスレッドのいくつかの種類ですか? – AzzyDude

+0

私は、ライブラリ "lazy.js"を使ってたくさんのオブジェクトを反復していたときにこの質問をしました。その同期操作にはしばらく時間がかかりました。同期関数を待っているユースケースは、ワーカーを介して処理するのが最適です。実際のWebアプリケーションでは、このユースケースに遭遇することは稀です。通常、サーバー上での重い作業は悪いユーザーエクスペリエンスを防ぐために行う必要があるためです。 – aaaaaa

答えて

1

longFunction()の非同期コードを使用し、確定メッセージが解決された後にthis.loadingをfalseに設定します。

<div v-on:click="doThings()">{{stuff}}</div> 

methods: { 
    doThings: function() { 
     this.loading = true 
     longFunction().then(() => { 
      this.loading = false 
     }) 
    } 
} 
var longFunction = function() { 
    return new Promise((resolve, reject) => { 
    window.setTimeout(()=>{ // force a new (pseudo)thread 
     // do stuff, then 
     resolve() 
    },100); // ...some reasonably short interval. One millisecond is working for me when testing locally, but it might be better to include some extra buffer, to ensure Vue is in its next tick 
    }); 
} 

また、あなたはそのあなたのVueのコンポーネントが上の変更のためのwatchをすることができ、そしてバックにはfalseにloadingを設定することができるコンポーネントに信号としてそれを使用longFunctionへのオブジェクト参照を渡すことができます。

+0

これは私の考えでもありましたが、問題は同じことですが、VueではDOMを更新する機会はありません。 – Bert

+0

Aaaaahh、本当に? OKを描画ボードに戻します。 –

+0

これは私がそれを使って遊んでいるところです:settimeoutをコメントアウトしてlongFunctionのコメントを外してもDOMを更新することは決してありません。私は約束がすぐに実行され、長い関数がスレッドを引き継ぐからだと思います。 setTimeoutを使用すると、一定の時間(ここでは50)が必要です。私は* nextTickより*長くてはいけないと思うが、ティックの値がVueにあるかどうかわからない。 https://codepen.io/Kradek/pen/VrLQWY?editors=1010 – Bert

関連する問題