vue は、addRoutes が動的にルートを追加した後の更新失敗の問題をどのように解決しますか?
この記事では、addRoutes がルートを動的に追加した後の更新失敗の問題を vue がどのように解決するかを主に紹介します。これを必要とする友人に参照してもらいます。 addRoutes を使用してルートを動的に追加しますが、更新すると無効になります。少し前にプロジェクトでこのアプリケーション シナリオに遭遇したので、時間をかけて調べ、共有し、記録しました。間違っている場合は修正してください。間違っている。
アプリケーションシナリオ:
ユーザー A がシステムにログインすると、ページにボタンが表示されます。クリックするとルートが動的に追加され、ジャンプします。
ジャンプ後、ユーザーは現在のページに留まります。 。 このボタンをクリックせずにブラウザにアドレスを入力すると、ユーザーは 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)。ルートをジャンプして保存するためのボタンです。
ルートを保存するステップは、ジャンプ先のコンポーネントを入力するためです。これは、ルートの追加前に無限ループが発生するのを防ぐためです。1 つは、次の 2 つのポイントです。パス、もう 1 つはコンポーネントです。これをメソッドにカプセル化すると、簡潔に見えます。1 点、ここではそれを行いません。固定ルートと動的に追加されたルートを接続するには concat メソッドを使用することを忘れないでください。ロールバック時にブラウザが正常に戻れるように
//点击跳转 <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 id="无论你怎么刷新我都会留在当前页面">无论你怎么刷新我都会留在当前页面</h3> <h3 id="并且点击浏览器回退键-我会跳到之前页面-不会循环">并且点击浏览器回退键,我会跳到之前页面,不会循环</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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Ace は、JavaScript で書かれた埋め込み可能なコード エディターです。 Sublime、Vim、TextMate などのネイティブ エディターの機能とパフォーマンスに匹敵します。あらゆる Web ページや JavaScript アプリケーションに簡単に埋め込むことができます。 Ace は Cloud9 IDE のメイン エディタとして維持されており、Mozilla Skywriter (Bespin) プロジェクトの後継です。

Vue アプリケーションで vue-router エラー「NavigationDuplicated:Avoidedredundantnavigationtocurrentlocation」が発生しました – 解決方法は? Vue.js は、高速で柔軟な JavaScript フレームワークとして、フロントエンド アプリケーション開発でますます人気が高まっています。 VueRouter は、ルーティング管理に使用される Vue.js のコード ライブラリです。ただし、場合によっては、

Vue.js は、今日のフロントエンド開発において非常に人気のあるフレームワークとなっています。 Vue.js が進化し続けるにつれて、単体テストの重要性がますます高まっています。今日は、Vue.js 3 で単体テストを作成する方法を検討し、いくつかのベスト プラクティスと一般的な問題と解決策を提供します。

Vue.js では、開発者は、JSX 構文とテンプレート構文という 2 つの異なる構文を使用してユーザー インターフェイスを作成できます。どちらの構文にもそれぞれ長所と短所があるので、それらの違い、長所と短所について説明します。

実際の開発プロジェクトのプロセスでは、比較的大きなファイルをアップロードする必要がある場合がありますが、その場合はアップロードが比較的遅くなり、バックグラウンドでフロントエンドがファイルのスライスをアップロードする必要がある場合があります。これは非常に簡単です。たとえば、1Aギガバイトのファイル ストリームはいくつかの小さなファイル ストリームに分割され、インターフェイスはそれぞれの小さなファイル ストリームを配信するように要求されます。

Amap を使用したとき、公式から多くのケースやデモを勧められましたが、これらのケースはすべてネイティブ メソッドを使用してアクセスしており、vue や React のデモは提供されていませんでした。vue2 アクセスについてはオンラインで多くの人が書いていますが、この記事では、 vue3 が一般的に使用される Amap API をどのように使用するかを見ていきます。皆さんのお役に立てれば幸いです。

chatgpt ミラー サイトで作業していたときに、一部のミラー サイトにはタイプライター カーソル効果がなく、テキスト出力のみがあることがわかりました。とにかくやりたいです。そこで私はそれを注意深く研究し、タイプライターとカーソルの効果を認識しました。ここで、私の解決策とレンダリングを共有します~

要素のドラッグ機能を実装するにはどうすればよいですか?次の記事では、Vue3 を使用してエレガントな要素のドラッグ機能を実装する方法を段階的に説明し、例を通じて関連する知識ポイントを学習します。
