業務でERB(Embedded Ruby)でできている画面の一部分だけをVue.js化しています。
Vue.jsで作ったコンポーネントで特定の操作を実行した後にERBでできている別の画面へ遷移させたかったのですが、やり方が分からなかったので備忘録として残します。
バージョン
- Vue.js 3.3.4
- Ruby 3.0.3
- Rails 6.1.6.1
記事の信頼性
- ぼくは独学で未経験から従業員300名以上の自社開発企業へ転職しました。
- 実務ではVue.jsとRailsを毎日書いています。
- 初心者や駆け出しエンジニアがつまづくポイントも身をもってよく理解しています。
目次
問題
ERBでできている画面のうち、モーダルウィンドウだけをVue.jsへ移行する作業に取り組んでいました。
元々の仕様として、モーダル内で「制限」ボタンを押すと処理の実行後にERBでできている別の画面へ遷移させる挙動でしたが、Vue.jsに移行後もその仕様を踏襲する方針となりました。
しかし、「Vue.jsからERBでできている画面へどう遷移させるんだ?」と混乱していました。
解決方法
結論として、JavaScriptのhref
メソッドを用いてwindow.location.href='https://hogehoge.com'
のように記述すれば良いだけでした。
const onSubmit = async () => {
if (!props.onClickSubmit) return;
await props.onClickSubmit();
// ユーザ一覧画面へ遷移
window.location.href = 'https://hogehoge.com/users';
};
また、別タブで画面を開きたい場合は、次のように書きます。
const onSubmit = async () => {
if (!props.onClickSubmit) return;
await props.onClickSubmit();
// ユーザ一覧画面へ遷移
window.open = ('https://hogehoge.com/users', '_blank');
};
open
メソッドを使う場合は、location
は不要なので注意してください。
おわりに
ERBとVue.jsが絡む実装はややこしいなといつも感じています。
コメント