ツリーメニュー(多階層メニュー)機能モジュールのAngular実装
前置き
この記事では、伝説のツリー構造メニューであるマルチレベルメニューの効果を共有することです、理論的には無限レベルメニュー、もちろん、特定の要件にデータ構造をサポートしていますが、我々は必要な構造にデータを組み立てることができるので、これも困難な作業ではありません。次の例では、完全に良いではありませんが、見積もりは十分です。このマルチレベルメニューは、行うには、公式のAngularの左メニューの効果を模倣している、類似性の効果は99%に達する必要があります、私はすべてのコードを投稿したいので、この記事では、もう少しコンテンツ(主にコード)であり、あなたが不足しているコードについて空想させないようにしてみてください。さて、このメニュー機能の旅を始めましょう
このマルチレベルメニューは、以下の機能を実装しています。
- 1、マルチレベルメニューを表示することができ、理論的には無限レベルメニューを表示することができます。
- 2、現在のメニューのハイライト機能
- 3、更新後、最後にクリックしたメニューがサブメニューであっても、自動的に位置を特定し、親メニューは自動的に展開されます。
- 4、サブメニューの表示非表示は、格納、展開、フェードイン、フェードアウトの効果付き
アンギュラー多階層メニュー
いつものように、さっそくコードを見てみましょう。コードを始める前に、コードのファイル構造の概要図を見てみましょう。
レンダリングの後、その効果を見てみましょう。結局のところ、これが次のコードの山を読み通す勇気を与えてくれるのです。
チュートリアル]メニューを展開し、[Hero Editor Menu]をクリックし、[Core Knowledge] - [Modules and Data Binding] - [Lifecycle Hooks] をクリックして、ページを更新すると、[Lifecycle Hooks] メニューが自動的に見つかりハイライトされ、 [Core Knowledge] - [Modules and Data Binding] メニューも自動的に展開しハイライトされるようになりました。
上記の各メニューは、クリックすると空白の詳細ページにジャンプしますが、この詳細ページは、メニューが正しくジャンプしているかどうかを確認するためのものであり、メニューが正しくジャンプしたかどうかは、ナビゲーションバーのURLの変化を見て判断することができます。
まず、一番目立つコードを掲載します。
-
<div class = "level-1" > <ng-template [ ngIf ] = "menu.type === 'link'" > <div> <a class = "link level-1" routerLink = "{
{menu.url}}" routerLinkActive = "selected" ( click ) = "toggleSubMenu(menu)" > { { menu.name }} </a> </div> </ng-template> <ng-template [ ngIf ] = "menu.type === 'button'" > <div> <div class = "button heading" [ ngClass ] = "{expand:menu.expand,selected:menu.isSelected}" ( click ) = "toggleSubMenu(menu)" > { {menu.name}} <div class = "icon" > <svg xmlns = "http://www.w3.org/2000/svg" focusable = "false" viewBox = "0 0 24 24" > <path d = "M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z" ></path> </svg> </div> </div> <ng-template [ ngIf ] = "menu.expand" > <div class = "heading-children" [@ inOut ] = "out" > <nav-item [ menu ] = "menu" * ngFor = "let menu of menu.subMenu" ></nav-item> </div> </ng-template> </div> </ng-template> </div>
上の routerLinkActive は、現在のメニューのハイライトを設定します。[inOut]はバインドアニメーション効果で、詳細は公式ドキュメントを参照してください。
このhtmlはAngularタグの <ng-template> を使用しています。このタグの使用方法はウェブで検索してください。
-
a {
text - - decoration : none ; color : #333; } . link , . button { display : block ; padding : 10px 15px ; transition : background - color 0.2s ease - in - - out 0s , color 0.3s ease - in - - out 0.1s ; - - moz - user - select : none ; - - webkit - - user - select : none ; - - ms - user - select : none ; - - khtml - user - select : none ; user - - select : none ; } . button { position : relative ; } . link : hover , . button : hover { color : #1976d2; background - color : #eee; cursor : pointer ; } . icon { position : absolute ; right : 0 ; display : inline - - block ; height : 24px ; width : 24px ; fill : currentColor ; transition : - webkit - - transform . 15s ; transition : transform . 15s ; transition : transform . 15s , - - webkit - - transform . 15s ; transition - - timing - - function : ease - in - - out ; } . heading - children { padding - - left : 14px ; overflow : hidden ; } . expand { display : block ; } . collapsed { display : none ; } . expand . icon { - - webkit - - transform : rotate ( 90deg ); transform : rotate ( 90deg ); } . selected { color : #1976d2; }
-
import {
Component , Input , OnInit } from '@angular/core' ; import { ActivatedRoute , Router
関連
-
[解決済み】ERR_INVALID_HTTP_RESPONSEをAngular 7とASP.Net Core 2.2を使ってGoogle Chromeブラウザーで使用する場合
-
[解決済み] LegendItemComponent をカスタマイズする Angular 用 kendo-ui
-
[解決済み] Angular CLIでコンポーネントの名前を変更する方法は?
-
[解決済み] イオン4オブザーバブル
-
[解決済み] Uncaught (in promise): Ionic 2でcordova_not_available。
-
[解決済み] ウェブストーム Must be lvalue」の意味するところ
-
[解決済み] モジュール "ionic-native" が見つかりません。
-
[解決済み] なぜ mat-tables matRowDef は 2 つの変数を含むのですか?
-
[解決済み] このメソッドをリファクタリングして、認知的複雑度を21から許容される15に下げます。リファクタリングして複雑さを軽減する方法
-
[解決済み] Angular2において、テンプレートを必要としないコンポーネントがありますが、テンプレートエラーが発生します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Typescript - コードが TS1128: Declaration or Statement expected というエラーでビルドに失敗するが、コードを提供すると期待通りに実行される。
-
[解決済み] AngularのmatSortがソートされない
-
[解決済み] Angular2 - エラー。セレクタ "app-root" はどの要素にもマッチしませんでした。
-
[解決済み] プロパティ 'json' はタイプ 'Object' に存在しません。
-
[解決済み] Angularで電話番号の入力をフォーマットする
-
angular reports error No value accessor for form control with name ***.
-
角度学習(XIII) - コンポーネント
-
[解決済み] Pipe/@Directive/@Component アノテーションを追加してください。エラー
-
[解決済み] 時刻・時計を角度で表示する
-
[解決済み] NullInjectorError: AngularFirestore のプロバイダがない