ホームページ ウェブフロントエンド jsチュートリアル vuex を使用してメニュー管理を実装する方法

vuex を使用してメニュー管理を実装する方法

Jun 19, 2018 pm 02:36 PM
vuex メニュー メニュー管理

この記事では主にvuexを使ったメニュー管理の詳細な説明を紹介しますので、参考にしてください。

vuex の利点は、複雑な状態管理でのみ実現できます。

プロジェクトに複数のレベルのメニューがあり、同じレベルの複数のメニューが異なるコンポーネントに分散している場合、メニューがジャンプすると、プロジェクト内で同時にメニューの各レベルのハイライトは 1 つだけになります。 、ルーティングの変更に加えて、対応するメニューも強調表示する必要があります (以前の非強調表示状態への復元)。これは vuex を使用するための完璧なシナリオです。

シンプルなメニュー管理に DOM 操作を使用する

メニュー管理に DOM を使用する その背後にあるアイデアは、メニューをクリックするときにイベント オブジェクトをイベント ハンドラーに渡し、現在ハイライトされているメニューをハイライト解除することです。クリックしたメニューを強調表示します。

<p class="menu-url">
 <span class="active userList" @click="menuClicked($event, &#39;userList&#39;)">注册</span>
 <span class="chargeList" @click="menuClicked($event, &#39;chargeList&#39;)">充值</span>
 <span class="buyList" @click="menuClicked($event, &#39;buyList&#39;)">购买</span>
 <span class="bangList" @click="menuClicked($event, &#39;bangList&#39;)">到期</span>
 <span class="withDrawList" @click="menuClicked($event, &#39;withDrawList&#39;)">提现</span>
</p>
ログイン後にコピー
menuClicked (event, url) {
 // 当前高亮的 menu 非高亮
 const currentActiveLink = this.querySelector(&#39;.active&#39;);
 currentActiveLink.classList.remove(&#39;active&#39;);
 // 当前点击的 menu 高亮
 event.target.classList.add(&#39;active&#39;);
 // 路由跳转
 this.$router.push(`/panel/list/${url}`);
},
ログイン後にコピー

クリックして切り替えるとメニューが強調表示されますが、初期化のたびにデフォルトのメニューが強調表示され、この時点でユーザーがデフォルト以外の強調表示されたメニューでページを手動で更新すると、メニューが強調表示されます。エラー (たとえば、購入リスト ページを更新した後、ページのコンテンツは購入リストに残りますが、強調表示されたメニューがユーザーリストに変わります)。

このバグを解決したい場合は、メニューのステータスをローカルに保存する必要があります (更新してもストレージのステータスは変わりません)。ここでは説明しませんが、DOM が有効であることは確かです。 + ローカル ストレージ コントロール メニューの強調表示。プロジェクトが大きくなるにつれて、ソリューションの保守が困難になります。

いよいよ vuex の登場です。

メニュー管理に vuex を使用する

メニュー管理に vuex を使用するには 在开发前就规划好菜单的层级 ,以便在 vuex 分配 state mutations が必要です。

計画レベル

プロジェクト内のどのメニューが第 1 レベルのメニューで、どのメニューが第 2 レベルのメニューであるかを決定します。ここでは、操作を簡略化するために、同じレベルのメニューには名前が付けられていることに注意してください。 vuex では、メニューがどのページに属しているかに注意を払う必要はなく、ステータスにだけ注意してください。メニューレベルは通常次のとおりです:

|-root
| |
| |-first-menu1
| |   |- second-menu1
| |   |- second-menu2
| |   |- second-menu3
| |
| |-first-menu2
|    |- second-menu3
|    |- second-menu4
|    |- second-menu5
ログイン後にコピー

vuex に `state` と `mutations` を割り当てます

異なるレベルのメニューがそれぞれ 1 つの `state` を占有します `mutations` については、この例では 1 つの対応する `state` を占めます。 ` は `mutations` と書かれていますが、実際の作業でのコードの再利用を減らすために、メニューの状態管理用の `mutations` は 1 つだけ記述し、パラメータを渡すことでどのレベルと対応するメニューを変更するかを決定できます。

ページが更新された後に vuex の状態が再初期化されることに注意してください。これはメニューの管理に必要な機能と明らかに矛盾しています (アクティブなトリガーを除き、他の操作はメニューに影響を与えることはできません)。 vuex のデフォルトのライフサイクルは、vuex-persistedstate を通じて変更できます。次のコード例では、vuex の状態を Cookie に保存します。 vuex の状態:

const store = new Vuex.Store({
 state: {
  // 初始化
  activeFirstMenu: &#39;firstMenu1&#39;,
  activeSecondMenu : &#39;secondMenu1&#39;,
 },
 mutations: {
  // 更改一级菜单
  changeFirstActiveMenu (state, menu) {
   state.activeFirstMenu = menu;
  },
  // 更改二级二级菜单
  changeSecondActiveMenu (state, menu) {
   state.activeSecondMenu = menu;
  }
 },
});
ログイン後にコピー

js を記述するときにコツがあります。ルート パスと対応する強調表示されたメニュー名は同じである必要があります。ルート ジャンプは強調表示されたメニューに直接関連しているため、パラメータを 1 つ減らすことができます:

<p class="subMenu">
 <span :class="{ activeSecondMenu: activeMenu.secondMenu1 }" @click="menuClicked(&#39;secondMenu1&#39;)">secondMenu1</span>
</p>
<p class="subMenu">
 <span :class="{ activeSecondMenu: activeMenu.secondMenu2 }" @click="menuClicked(&#39;secondMenu2&#39;)">secondMenu2</span>
</p>
<p class="subMenu">
 <span :class="{ activeSecondMenu: activeMenu.secondMenu3 }" @click="menuClicked(&#39;secondMenu3&#39;)">secondMenu3</span>
</p>
ログイン後にコピー

その他

vuexの最適化について

前述したように、実際の作業でコードの再利用を高めるためには、特定のカテゴリの状態管理に対してミューテーションを1つだけ記述し、パラメータを渡すことで変更内容を決定することができます(ペイロード)。メニュー管理を例に挙げると、次の最適化を実行できます: vuex は次のように最適化されます:

data () {
 return {
  // 初始化
  activeMenu: {
   // menu 名称相同,和对应路由的 path 相同
   secondMenu1: &#39;&#39;,
   secondMenu2: &#39;&#39;,
   secondMenu3: &#39;&#39;,
  },
 };
},
computed: {
 activeMenuName () {
  // 检测 vuex 中 activeSecondMenu 的变化
  return this.$store.state.activeSecondMenu;
 }
},
methods: {
 menuClicked(path) {
  // 取消当前 tab 高亮
  this.activeMenu[this.activeMenuName] = false;

  // 更新 vuex 状态及 menu 高亮
  this.$store.commit("changeSecondActiveMenu", path);
  this.activeMenu[this.activeMenuName] = true;

  // 路由跳转 path 和对应 menu 名称相同 
  this.$router.push(`/somePath/${path}`);
 },
 init () {
  // 刷新页面重置正确高亮菜单tab
  this.activeMenu[this.activeMenuName] = true;
 },
},
mounted: {
 this.init();
},
ログイン後にコピー

コンポーネントの js 部分は次のように最適化されます:

const store = new Vuex.Store({
 // 其他代码略

 mutations: {
  // 优化后代码,合并 changeFirstActiveMenu 和 changeSecondActiveMenu
  changeActiveMenu (state, menuInfo) {
   state[menuInfo.menuHierarchy] = menuInfo.name;
  }
 }
});
ログイン後にコピー
上記は、皆さんのために私がコンパイルしたものです。今後も皆様のお役に立ちますように。

関連記事:

Reactを使って繰り返しレンダリングを防ぐ方法

vueを使ったグリッドレイアウト機能の実装方法

BootstrapのModalにドラッグ&ドロップ機能を追加する方法の紹介

やり方JSで作成 プレビュー効果を実現するには

three.jsを使用してプロジェクトを作成します

以上がvuex を使用してメニュー管理を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Windows 11: スタート レイアウトをインポートおよびエクスポートする簡単な方法 Windows 11: スタート レイアウトをインポートおよびエクスポートする簡単な方法 Aug 22, 2023 am 10:13 AM

Windows 11 では、スタート メニューが再設計され、スタート メニューにフォルダー、アプリ、アプリがあった以前のバージョンとは異なり、ページのグリッドに配置された簡略化されたアプリのセットが特徴です。 [スタート] メニューのレイアウトをカスタマイズし、他の Windows デバイスにインポートおよびエクスポートして、好みに合わせてカスタマイズできます。このガイドでは、スタート レイアウトをインポートして Windows 11 のデフォルト レイアウトをカスタマイズする手順について説明します。 Windows 11 の Import-StartLayout とは何ですか? Import Start Layout は、Windows 10 以前のバージョンでスタート メニューのカスタマイズをインポートするために使用されるコマンドレットです。

Windows 11の右クリックメニューで「その他のオプションを表示」をデフォルトにする方法 Windows 11の右クリックメニューで「その他のオプションを表示」をデフォルトにする方法 Jul 10, 2023 pm 12:33 PM

私たちユーザーが決して望んでいない最も迷惑な変更の 1 つは、右クリックのコンテキスト メニューに [その他のオプションを表示] が含まれていることです。ただし、これを削除して、Windows 11 のクラシック コンテキスト メニューに戻すことができます。複数回クリックしたり、コンテキスト メニューで ZIP ショートカットを探したりする必要はもうありません。 Windows 11 で本格的な右クリック コンテキスト メニューに戻るには、このガイドに従ってください。解決策 1 – CLSID を手動で調整する これは、リストにある唯一の手動方法です。この問題を解決するには、レジストリ エディターで特定のキーまたは値を調整します。注 – このようなレジストリの編集は非常に安全であり、問​​題なく機能します。したがって、システムでこれを試す前に、レジストリのバックアップを作成する必要があります。ステップ 1 – 試してみる

Windows 11の右クリックコンテキストメニューから「Windowsターミナルで開く」オプションを削除する方法 Windows 11の右クリックコンテキストメニューから「Windowsターミナルで開く」オプションを削除する方法 Apr 13, 2023 pm 06:28 PM

デフォルトでは、Windows 11 の右クリック コンテキスト メニューには [Windows ターミナルで開く] というオプションがあります。これは、ユーザーが特定の場所で Windows ターミナルを開くことができる非常に便利な機能です。たとえば、フォルダーを右クリックして [Windows ターミナルで開く] オプションを選択すると、Windows ターミナルが起動し、その特定の場所が現在の作業ディレクトリとして設定されます。これは素晴らしい機能ですが、誰もがこの機能を活用できるわけではありません。一部のユーザーは、右クリック コンテキスト メニューにこのオプションを入れたくないため、右クリック コンテキスト メニューを整理するために削除したいと考えている場合があります。

純粋な CSS を使用して影付きのメニュー ナビゲーション バーを実装する実装手順 純粋な CSS を使用して影付きのメニュー ナビゲーション バーを実装する実装手順 Oct 16, 2023 am 08:27 AM

純粋な CSS を使用して影付きのメニュー ナビゲーション バーを実装する手順には、特定のコード サンプルが必要です。Web デザインでは、メニュー ナビゲーション バーは非常に一般的な要素です。メニュー ナビゲーション バーに影効果を追加すると、外観が向上するだけでなく、ユーザー エクスペリエンスも向上します。この記事では、純粋な CSS を使用して影付きのメニュー ナビゲーション バーを実装し、参考として具体的なコード例を示します。実装手順は次のとおりです。 HTML 構造の作成 まず、メニュー ナビゲーション バーを収容するための基本的な HTML 構造を作成する必要があります。による

Vue アプリケーションで vuex を使用するときに「エラー: [vuex] 不明なアクション タイプ: xxx」という問題を解決するにはどうすればよいですか? Vue アプリケーションで vuex を使用するときに「エラー: [vuex] 不明なアクション タイプ: xxx」という問題を解決するにはどうすればよいですか? Jun 25, 2023 pm 12:09 PM

Vue.js プロジェクトでは、vuex は非常に便利な状態管理ツールです。これは、複数のコンポーネント間で状態を共有するのに役立ち、状態の変更を管理する信頼性の高い方法を提供します。ただし、vuex を使用すると、「エラー:[vuex]unknownact​​iontype:xxx」というエラーが発生することがあります。この記事では、このエラーの原因と解決策について説明します。 1. エラーの原因 vuex を使用する場合、いくつかのアクションと mu を定義する必要があります。

Vue アプリケーションで vuex を使用するときに「エラー: [vuex] 変更ハンドラーの外で vuex ストアの状態を変更しません。」という問題を解決するにはどうすればよいですか? Vue アプリケーションで vuex を使用するときに「エラー: [vuex] 変更ハンドラーの外で vuex ストアの状態を変更しません。」という問題を解決するにはどうすればよいですか? Jun 24, 2023 pm 07:04 PM

Vue アプリケーションでは、vuex の使用が一般的な状態管理方法です。ただし、vuex を使用すると、「Error:[vuex]donotmutatevuexstorestateoutsidemutationhandlers」というエラー メッセージが表示されることがあります。このエラー メッセージは何を意味しますか?このエラー メッセージが表示されるのはなぜですか?このエラーを修正するにはどうすればよいですか?この記事では、この問題について詳しく説明します。エラーメッセージには次の内容が含まれます

Vuex を使用して Vue2.x のグローバル状態を管理するためのベスト プラクティス Vuex を使用して Vue2.x のグローバル状態を管理するためのベスト プラクティス Jun 09, 2023 pm 04:07 PM

Vue2.x は現在最も人気のあるフロントエンド フレームワークの 1 つであり、グローバル状態を管理するためのソリューションとして Vuex を提供します。 Vuex を使用すると、状態管理がより明確になり、保守が容易になります。開発者が Vuex をより適切に使用し、コードの品質を向上させるために、Vuex のベスト プラクティスを以下に紹介します。 1. モジュラー組織状態の使用 Vuex は単一の状態ツリーを使用してアプリケーションのすべての状態を管理し、コンポーネントから状態を抽出することで、状態管理をより明確かつ理解しやすくします。多くの状態を持つアプリケーションではモジュールを使用する必要があります

iPhoneでメッセージを編集する方法 iPhoneでメッセージを編集する方法 Dec 18, 2023 pm 02:13 PM

iPhone のネイティブ メッセージ アプリを使用すると、送信されたテキストを簡単に編集できます。このようにして、間違いや句読点を修正したり、テキストに適用された可能性のある間違った語句や単語を自動修正したりすることができます。この記事では、iPhone でメッセージを編集する方法を学びます。 iPhone でメッセージを編集する方法 必須: iOS16 以降を実行している iPhone。 iMessage テキストはメッセージ アプリでのみ編集でき、元のテキストを送信してから 15 分以内に限り編集できます。 iMessage 以外のテキストはサポートされていないため、取得または編集できません。 iPhone でメッセージ アプリを起動します。 [メッセージ] で、メッセージを編集する会話を選択します

See all articles