Vueプロジェクトで作業中にsetTimeoutを使用して、this.router.push({パス: "/xxx" })メソッドを呼び出すと、pushは関数ではないと表示されます。
settimeoutを使用すると、thisはウィンドウを指します。""がウィンドウを指しているのに、なぜthisが変化してデータオブジェクトを指さなくなるのですか?
これは、setTimeout関数が、実行中の関数とは完全に別の実行環境で実行されるコードを呼び出しているため、thisがウィンドウオブジェクトを指すようになっているためです!
export default {
methods: {
start: function () {
setTimeout(() => {
this.$router.push({ path: "/xxx" })
}, 300);
}
}
data(){
_this = this
}
methods: {
start: function () {
setTimeout(() => {
_this.$router.push({ path: "/xxx" })
}, 300);
}
}