Vueは新しいウィンドウを開き、パラメータ転送のグラフィック例を実装します。

Vueは新しいウィンドウを開き、パラメータ転送のグラフィック例を実装します。

私が実現したい機能は、新しいウィンドウを開いて新しいページを表示することですが、パラメータを渡す必要があり、パラメータをアドレスバーに表示することはできません。さらに、ページを更新しても、渡されたパラメータは失われず、新しいウィンドウ、つまりブラウザタブを手動で閉じない限り、常に存在する必要があります。

Baidu のプログラミングを通じて、オンライン コンテンツではこの効果はまったく得られず、落とし穴があることが分かりました。明らかに実現不可能ですが、あたかも事実であるかのように書かれています。そのため、タイトルに「画像があり、真実がある」とわざと付け加えました。私はあなたを騙しているわけではありません。その機能を実現できないのであれば、人を騙すために出てこないでください。

まずは私が作成したコードを書き出し、その後、他の人が実装できない落とし穴や、この点で注意する必要がある点を紹介します。

新しいウィンドウを開いてコードを渡す

//新しいウィンドウを開いてパラメータを渡します。パラメータはアドレスバーに表示できません。ウィンドウが閉じられていない場合は継続的に更新されます。パラメータは常に有効です。handleWindow() {
 //主に新しいウィンドウを開く機能を実現する var route = this.$router.resolve({
 名前: 'Xterm',
 })
 //主にパラメータを保存する機能を実装します sessionStorage.setItem("ip", "1.1.1.1");
 
 window.open(route.href, '_blank')
}

私のルーティング構成も掲載されています。

{
 パス: '/xterm',
 非表示: true、
 コンポーネント: () => import('@/views/monitor/xterm/index'),
 名前: 'Xterm',
},

これでページはパラメータを受け取ります

//Vue 初期化メソッド。ページが初期化されたら、パラメータ created() を取得します。{
 アラート(sessionStorage.getItem("ip"));
 this.ip = sessionStorage.getItem("ip")
},

真実の写真を投稿する

これは、vue を通じて新しいウィンドウを開き、sessionStorage を通じてパラメータを渡すことによって行われます。なぜこの機能を実現するにはこの方法しか使えないのでしょうか? 落とし穴に足を踏み入れた私の体験をお話ししましょう。インターネット上で偽のコードを使って人を騙す悪人もいます。そのようなテストに耐えられないプログラマーはいるでしょうか?

まず、この機能は新しいウィンドウを開く必要があるため、それを実行するには 3 つの方法があります。

最初の方法: <router-link>タグを使用する。個人的には、このタグの書き方は好きではありません。単純なビジネス シナリオではかろうじて問題ありませんが、多くのビジネスと多くのパラメーターを処理する必要があります。このタグの書き方は、ビジネスの拡大には役立ちません。直接排除、OUT!

2 番目の方法: router.replaceメソッドを使用する。このメソッドはウィンドウを開き、現在の A ページをジャンプ先の B ページに置き換えます。新しいウィンドウを開いて新しいものを表示すると、前のページがすぐに消えてしまいます。これはおかしくありませんか?実験後、OUT!

3 番目の方法: router.resolveメソッドを使用して、現在の A ページに影響を与えずに新しいウィンドウを開き、ブラウザ タブを直接開きます。タブを切り替えて、2 つのページの情報データを表示できます。これはいいですね、気に入りました、これです。

ちなみに、vue2.0以降、普及が進むHTML5との整合性を保つため、router.goとrouter.pushは新しいウィンドウを開く属性をサポートしなくなりました。router.goは進むと戻るとして使用され、router.pushは特定のページへのガイドとして使用されます。このジャンプでは新しいウィンドウは開きませんが、履歴機能があります。1つのウィンドウに複数のタブがある場合は、図に示すようにこれを使用して複数のタブを開くことができます。

さて、router.resolve を使用すると、新しいウィンドウにジャンプできるので、パラメータを渡し始めますが、ここが難しいところです。オンライン転送によると、パラメータ転送には主に 2 つの種類があります。

//最初のパラメータをテストする testA (aaa) {
 const ルート = this.$router.resolve({
   名前: 'Xterm', 
   パラメータ: {
     ip:aaa
   }
 })
 window.open(route.href,'_blank')
}

//2番目のパラメータをテストする testA (bbb) {
 const ルート = this.$router.resolve({
   パス: '/xterm', 
   クエリ: {
     IP: bbb
   }
 })
 window.open(route.href,'_blank')
}

対応する受信パラメータは次のとおりです。

作成された() {
 //最初のアクセスパラメータをテストします this.ip = this.$route.params.ip
 // 2 番目のアクセス パラメータをテストします this.ip = this.$route.query.ip
},

テストの結果、最初のタイプでは値を取得できないのに対し、2 番目のタイプでは渡されたパラメータの値がアドレス バーに公開されます。最初の方法では、あらゆる種類の特別な処理を実行しても、最良の結果は最初の値のみを取得することです。ページを再度更新すると、値は失われます。なぜこのようなことが起こるのでしょうか?ユーザーが行き詰まりを感じて更新ボタンをクリックしないことを誰が保証できるでしょうか? router.pushでパラメータを渡すことに全く問題はありません。すべてのパラメータを受け取ることができます。違いは、name+params の組み合わせの場合、パラメータはアドレスバーに表示されず、更新後にデータが消えてしまうことです。path+query の組み合わせの場合、パラメータはアドレスバーに表示され、ページをどのように更新しても値はそこに残ります。プッシュで試してみたら、解決方法も同じだろうと自然に思ったのでしょう。アドレスバーでパラメータを渡さずに最初の方法を使うと絶対に成功しないというブログをたくさん見てきましたが、クリック数は依然として非常に多く、泣きたいのに涙が出ません。

自分でやるしかありませんでした。キャッシュを探して、localStorage と sessionStorage プロパティを見つけました。SessionStorage はデータを一時的に保存するために使用され、ウィンドウまたはタブを閉じると削除されます。localStorage は、Web サイト全体のデータを永続的に保存するために使用されます。保存されたデータには、手動で削除されるまで有効期限はありません。明らかに、sessionStorage で十分です。

これら 2 つの属性をサポートするブラウザのバージョンは次のとおりです。

この時点で、問題は実際に解決しました。実際、複雑ではありません。インターネット上の回答の質がまちまちなだけです。他の人が使用できるように記録しておきます。

要約する

これで、Vue で新しいウィンドウを開いてパラメータを渡す方法についての記事は終了です。Vue で新しいウィンドウを開いてパラメータを渡す方法についての関連記事は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • electron+vue は div コンテンツ編集可能なスクリーンショット機能を実現します
  • vue3.0 でカルーセル コンポーネントをカプセル化する手順
  • Vue は、デスクトップから Web ページにファイルをドラッグするためのサンプル コードを実装します (画像/オーディオ/ビデオを表示できます)
  • Vue の基本的な手順の例のグラフィック説明
  • Vue は Ctrip のカルーセル効果を模倣します (スライディング カルーセル、以下は高度に適応)
  • vue+echarts で中国地図のフロー効果を実現する (詳細な手順)
  • vue3 を使用したジグソーパズルゲームのリファクタリングの例
  • Vue で棒グラフを使用し、自分で設定を変更する方法
  • Vueは不規則なスクリーンショットを実装する

<<:  MySQL 5.7.18 winx64 のインストールと設定方法のグラフィックチュートリアル

>>:  win10 64 ビット システムに複数の JDK バージョンをインストールする際の切り替え問題と解決策の概要

推薦する

シェルスクリプトによるDockerコンテナの起動順序の制御の詳細な説明

1. 遭遇した問題分散プロジェクトの展開プロセスでは、サーバーの再起動後にアプリケーション(データベ...

CSSは半透明の境界と複数の境界のシーン分析を実現します

シナリオ 1:半透明の境界線を実現するには: CSS スタイルのデフォルトの動作により、背景色はコン...

ウェブページをデザインする際に注意すべきいくつかの問題

Web デザインは、個人の好みや Web ページの内容に応じて、デザインのレイアウトが常に変化します...

CentOs7 64 ビット MySQL 5.6.40 ソースコードのインストール プロセス

1. インストールプロセス中に問題が発生しないように、まず依存パッケージをインストールします。 [r...

Vue のドロップダウン ボックスのセカンダリ リンク効果を実装するためのサンプル コード

1. 成果を達成する 2. バックエンドから返されるデータ形式 「リスト」: [ { "i...

シンプルなドラッグ効果を実現するjs

この記事では、簡単なドラッグ効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な...

HTML メタタグの小さなコレクション

<Head>……</head> は <HTML> のファイル ヘ...

CentOS 8 に Postfix メール サーバーをインストールして設定する方法

Postfix は、Linux システム上で電子メールをルーティングまたは配信するために使用される無...

Win10 システムに MySQL8.0.13 をインストールする際の問題と解決策

オペレーティングシステム: Windows10 MySQL バージョン: 8.0.13-winx64...

HTML webpackプラグインの使用に関する簡単な分析

html-webpack-pluginプラグインを使用してページを開始すると、htmlページをメモリ...

https暗号化アクセス用にnginxを設定するための詳細なチュートリアル

環境: 1 CentOS Linux リリース 7.5.1804 (コア)ファイアウォールと sel...

Docker環境でJenkinsを設定すると、タスクをビルドするときにコンソールログに文字化けした中国語の文字が表示されます

目次1. 問題の説明: 2. Jenkins設定のトラブルシューティング3. コードログのエンコード...

antd pro に基づく SMS 認証コード ログイン機能 (プロセス分析)

目次まとめ全体的なプロセスフロントエンドページコード検証コードとログイン サービスをリクエストする ...

Linux システムでの vim プラグインのインストールの概要

目次vimプラグインマネージャーをインストールするプラグインデモを追加プラグインを削除するには: v...