この記事では、addRoutes がルートを動的に追加した後の更新失敗の問題を vue がどのように解決するかを主に紹介します。これを必要とする友人に参照してもらいます。 addRoutes を使用してルートを動的に追加しますが、更新すると無効になります。少し前にプロジェクトでこのアプリケーション シナリオに遭遇したので、時間をかけて調べ、共有し、記録しました。間違っている場合は修正してください。間違っている。
クリックするとルートが動的に追加され、ジャンプします。
ジャンプ後、ユーザーは現在のページに留まります。 。 このボタンをクリックせずにブラウザにアドレスを入力すると、ユーザーは 404 ページにジャンプしますgithub:https://github.com/Mrblackant...
オンラインで見る:http: //an888.net/router/ keepR...
アイデア
1. ユーザーは、addRutes を使用してルートとジャンプを動的に追加し、beforeEach を使用してルートを保存します。新しくジャンプしたページを更新するときに、以前にルートを保存したことがあり、新しいページが単なる更新イベントであると判断した場合は、以前に保存したルートを追加します。ボタンをクリックし、ルートを保存してジャンプします
//router/index.js export const constantRouterMap=[ { path: '/', // name: 'HelloWorld', component: HelloWorld } ] Vue.use(Router) export default new Router({ routes: constantRouterMap })ログイン後にコピー
(2)。ルートをジャンプして保存するためのボタンです。
//点击跳转 <template> <p> 点击新增 动态路由: "secondRouter" <br> <el-button>新增动态路由</el-button> </p> </template> <script> import router from 'vue-router' import {constantRouterMap} from '@/router' export default { name: 'kk', mounted(){ }, data () { return { msg: 'Welcome to Your Vue.js App' } }, methods:{ srouter(){ let newRoutes=constantRouterMap.concat([{path:'/secondRouter', component :resolve => require(["@/components/kk"], resolve ) }]) this.$router.addRoutes(newRoutes) this.$router.push({path:'/secondRouter'}) } } } </script> //跳转过去的component组件,xxx.vue <template> <p> 恭喜你,动态添加路由成功,浏览器的链接已经变化; </p> <h3>无论你怎么刷新我都会留在当前页面</h3> <h3>并且点击浏览器回退键,我会跳到之前页面,不会循环</h3> </template> <script> import router2 from '@/router' import router from 'vue-router' export default { name: 'HelloWorld', mounted(){ localStorage.setItem('new',JSON.stringify({'path':'/secondRouter','component':'kk'}))//保存路由 }, data () { return { msg: 'Welcome to Your Vue.js App' } }, methods:{ } } </script>
2. ルートインターセプトの前に
こちら インターセプト時に、localStorageに保存されている新しい動的ルートがあるかどうかを判断し、論理的に保存します。処理が完了すると、無限ループに陥るのを防ぐために保存されたルートがクリアされます。最初のレベルの判定に入った後、ページ更新イベントであるかどうかを再度判定する必要があります
不足点があれば修正してくださいimport router from './router' import { constantRouterMap } from '@/router' //router里的固定路由 router.beforeEach((to, from, next) => { if (localStorage.getItem('new')) { var c = JSON.parse(localStorage.getItem('new')), lastUrl=getLastUrl(window.location.href,'/'); if (c.path==lastUrl) { //动态路由页面的刷新事件 let newRoutes = constantRouterMap.concat([{ path: c.path, component: resolve => require(["@/components/" + c.component + ""], resolve) }]) localStorage.removeItem('new') router.addRoutes(newRoutes) router.replace(c.path) //replace,保证浏览器回退的时候能直接返回到上个页面,不会叠加 } } next() }) var getLastUrl=(str,yourStr)=>str.slice(str.lastIndexOf(yourStr))//取到浏览器出现网址的最后"/"出现的后边的字符ログイン後にコピー
ps:最初は、ルートジャンプ 404 が一致しないため、ここでインターセプトで処理する必要があると思いました後で、それはまったく必要ではないことがわかりました。ルートを登録するときに、次の 2 つの段落を追加するだけです。export const constantRouterMap = [{ path: '/', component: HelloWorld }, {//404 path: '/404', component: ErrPage }, { //重定向到404 path: '*', redirect: '/404' } ]ログイン後にコピー
全体的なアイデアは、主に beforeEach インターセプト + localStorage データ ストレージを使用して完了します。 AddRoutes は、ルート更新機能を無効化せずに動的に追加します。
上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:vue ルーター: 動的ルート マッチング 動的ルート マッチング
mixin を使用して、自作の vue コンポーネント通信プラグイン用のプラグインを作成する
以上がvue は、addRoutes が動的にルートを追加した後の更新失敗の問題をどのように解決しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。