1. はじめに
ルーティングは、実行中にコンポーネントに対してステートレスに動作します。つまり、ルーティングが終了すると、コンポーネントのステータスも削除されます。これは、ほとんどのシナリオで妥当です。
しかし、場合によっては、特別なニーズによって人々が半死状態になることもあります。これはすべてユーザー エクスペリエンスのためであり、ユーザーがモバイル端末でキーワードやそのようなリストを使用して商品を検索するという非常に一般的なシナリオです。死んでいるかどうかの判断は通常、自動次ページ アクションです。このとき、ユーザーが最終的に 2 ページ目にスクロールして、見たい製品が見つかると、製品の詳細ページに誘導され、バックします。 ..ユーザーは混乱しています。
Angular ルーティングとコンポーネントは、最初から RouterModule.forRoot
を通じて関係を形成します。ルートがヒットすると、ComponentFactoryResolver
がコンポーネントの構築に使用されます。 。 RouterModule.forRoot
形成一种关系,当路由命中时利用 ComponentFactoryResolver
构建组件,这是路由的本质。
而每一个路由并不一定是一次性消费,Angular 利用 RouteReuseStrategy
贯穿路由状态并决定构建组件的方式;当然默认情况下(DefaultRouteReuseStrategy)像开头说的,一切都不进行任何处理。
RouteReuseStrategy
从2就已经是实验性,当前依然如此,这么久应该是可信任。
二、RouteReuseStrategy
RouteReuseStrategy
我称它为:路由复用策略;并不复杂,提供了几种办法通俗易懂的方法:
shouldDetach
是否允许复用路由store
当路由离开时会触发,存储路由shouldAttach
是否允许还原路由retrieve
获取存储路由shouldReuseRoute
进入路由触发,是否同一路由时复用路由
这看起来就像是一个时间轴关系,用一种白话文像是这样:把路由 /list
设置为允许复用(shouldDetach
),然后将路由快照存在 store
当中;当 shouldReuseRoute
成立时即:再次遇到 /list
路由后表示需要复用路由,先判断 shouldAttach
是否允许还原,最后从 retrieve
拿到路由快照并构建组件。
当理解这一原理时,假如我们拿开头搜索列表返回的问题就变得非常容易解决。
三、一个示例
诚如上面说明的,只需要实现 RouteReuseStrategy
接口即可自定义一个路由利用策略。
1、创建策略
import {RouteReuseStrategy, DefaultUrlSerializer, ActivatedRouteSnapshot, DetachedRouteHandle} from '@angular/router'; export class SimpleReuseStrategy implements RouteReuseStrategy { _cacheRouters: { [key: string]: any } = {}; shouldDetach(route: ActivatedRouteSnapshot): boolean { return true; } store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void { this._cacheRouters[route.routeConfig.path] = { snapshot: route, handle: handle }; } shouldAttach(route: ActivatedRouteSnapshot): boolean { return !!this._cacheRouters[route.routeConfig.path]; } retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle { return this._cacheRouters[route.routeConfig.path].handle; } shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean { return future.routeConfig === curr.routeConfig; } }
定义一个 _cacheRouters
用于缓存数据(路由快照及当前组件实例对象)。
shouldDetach
直接返回true
表示对所有路由允许复用store
当路由离开时会触发。按path作为key存储路由快照&组件当前实例对象;path等同RouterModule.forRoot中的配置。shouldAttach
若path
在缓存中有的都认为允许还原路由retrieve
从缓存中获取快照,若无则返回null-
そして、各ルートは必ずしも 1 回限りの消費ではありません。もちろん、Angular はshouldReuseRoute
RouteReuseStrategy
を使用してルーティング状態を実行し、コンポーネントの構築方法を決定します。最初は何も行われていません。 処理も行われません。
RouteReuseStrategy
は 2 から実験的であり、今でもこのままであり、長い間信頼できるはずです。 2. RouteReuseStrategy
RouteReuseStrategy
私はこれをルート再利用戦略と呼んでいます。これは複雑ではなく、いくつかのわかりやすいメソッドを提供します。
-
shouldDetach
ルートの再利用を許可するかどうか -
store
はルートが離れるときにトリガーされ、ルートを保存しますshouldAttach
ルート復元を許可するかどうか retrieve
保存されたルートを取得-
🎜🎜これはタイムラインの関係のように見えます。日常用語では次のようになります: 再利用を許可するようにルートshouldReuseRoute
ルートトリガーを入力し、同じルートを再利用するかどうか/list
を設定します (shouldDetach
)。shouldReuseRoute
が確立されたら、ルート スナップショットをstore
に保存します。再利用する必要がある場合は、/list
ルートに再度遭遇した後に表現されます。ルートの場合、最初にshouldAttach
で復元が許可されるかどうかを判断し、最後にretrieve
からルート スナップショットを取得してコンポーネントをビルドします。 🎜🎜この原理を理解すると、最初に検索リストから返された問題を取り上げると、非常に簡単に解くことができます。 🎜🎜3. 例🎜🎜 上で説明したように、ルート使用戦略をカスタマイズするには、RouteReuseStrategy
インターフェイスを実装するだけです。 🎜🎜1. 戦略を作成します🎜providers: [ { provide: RouteReuseStrategy, useClass: SimpleReuseStrategy } ]
🎜 データ (ルーティング スナップショットと現在のコンポーネント インスタンス オブジェクト) をキャッシュするための_cacheRouters
を定義します。 🎜- 🎜
shouldDetach
は、すべてのルートでの再利用を許可するためにtrue
を直接返します🎜🎜 - 🎜
store
ルートが離れるときに起動します。パスをキーとして使用して、ルーティング スナップショットとコンポーネントの現在のインスタンス オブジェクトを保存します。このパスは RouterModule.forRoot の設定と同等です。 🎜🎜 - 🎜
shouldAttach
path
がキャッシュ内にある場合、ルートの復元が許可されているとみなされます 🎜🎜 - 🎜
retrieve キャッシュからスナップショットを取得します。そうでない場合は、null を返します🎜🎜<li>🎜<code> shouldReuseRoute
ルーティング トリガーを入力して、同じルートであるかどうかを判断します🎜🎜🎜🎜2.最後に、モジュールにポリシーを登録します: 🎜RouterModule.forRoot([ { path: 'search', component: SearchComponent }, { path: 'edit/:id', component: EditComponent } ])
🎜 このようなルーティング設定があるとします: 🎜rrreee🎜 検索コンポーネントは検索アクションに使用され、検索結果に基づいて編集ページにジャンプします。保存後は、 に戻ります。最後の検索結果の状態 (コードのこの部分を投稿することに興味はありません。plnkr)。 🎜🎜4. 結論🎜🎜 上記は簡単な紹介です。実際には、スクロールバーの位置やキャッシュのクリーニングなど、再利用の判断はさらに複雑になります。 🎜🎜このルーティング再利用戦略メカニズムをうまく利用すると、Web エクスペリエンスの多くの問題を解決できます。 🎜🎜🎜🎜🎜🎜🎜
- 🎜
以上がAngular ルーティングで戦略を再利用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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