業務でERB(Embedded Ruby)でできている画面の一部分だけをVue.js化しています。
Vue.jsで作ったコンポーネントで特定の操作を実行した際に画面全体をリロードしたかったのですが、やり方が分からなかったので備忘録として残します。
問題
ERBでできている画面のうち、ダイアログだけをVue.jsへ移行する作業に取り組んでいました。
元々の仕様として、ダイアログ内で「登録」ボタンを押すと処理の実行後に画面全体がリロードされる挙動でしたが、Vue.jsに移行後もその仕様を踏襲する方針となりました。
なのでVue.jsのコンポーネントからERBで実装されている画面をリロードする必要があるんですが、「Vue.jsからERBでできている画面全体をどう操作するんだ?」と混乱していました。
解決方法
単純にJavaScriptのreload
メソッドを用いてwindow.location.reload();
と記述すれば良いだけでした。
const onSubmit = async () => {
if (!props.onClickSubmit) return;
await props.onClickSubmit();
// 画面全体をリロード
window.location.reload();
};
JavaScriptに用意されているメソッドを使えばDOMを操作できるので、ERBだろうとVue.jsだろうと問題ないですね。
捕捉:window.location.reload()
とは?
reload
メソッドはwindow
オブジェクトのlocation
プロパティに含まれているメソッドです。
window
オブジェクトはブラウザ側で用意してくれているオブジェクトで、location
プロパティには現在のページのURLに関連する情報や操作が提供されています。
window
オブジェクトやlocation
プロパティの内容は開発者ツールから確認できます↓
ちなみにデバッグでよく使うconsole.log()
のconsole
もwindow
オブジェクトと同じくブラウザが用意してくれるオブジェクトですね。
おわりに
ブラウザの機能やJavaScript自体への理解が相当浅い、ということを再認識できました。
コメント