実際のプロジェクトで遭遇する要件同じリンクで異なるページ コンポーネントを読み込む必要があります。ユーザーが購入したサービスに応じて異なるページが表示されます。 実装が間違っているところもある
私は個人的に、実装するより良い方法はルートが設定されているサーバーデータを取得し、対応するコンポーネントを動的にロードします。 { パス: 'shopKPI', // バックグラウンドデータを事前にストアに保存しておけば、ここでストアデータにアクセスして直接判断できます // ただし、この特定のビジネスページのデータはグローバルストアに配置され、他の場所では使用されないため、実際には不要なコンポーネントです: () => import('@/views/store/dataVersion'), 名前: 'store_KPI', メニュー名: 'ショップコンサルタント', メタ: { コード: ['storeProduct.detail'] } } 理想は素晴らしいですが、現実には、コンポーネントが受信したメソッドは同期的に Promise を返す必要があります。 この時、上記の悪い実装方法1を思い出し、少し修正しました。 <!-- ChooseShopKPI.vue --> <テンプレート> <dataVersion v-if="!useNewShopKPI" /> <ShopKPI v-else /> </テンプレート> <スクリプト> 'lodash' から { get } をインポートします。 '@/api/store' から { getStoreReportFormVersion } をインポートします。 './dataVersion' から dataVersion をインポートします。 './ShopKPI' から ShopKPI をインポートします。 エクスポートデフォルト{ 名前: 'ChooseShopKPI', コンポーネント: データバージョン、 ショップKPI、 }, データ() { 戻り値: {useNewShopKPI: false }; }, 作成された() { getStoreReportFormVersion().then((res) => { (res、'data.data.new')を取得する場合){ this.useNewShopKPI = true; } }); }, }; </スクリプト> <style lang="css" スコープ></style> ルートレンダリングに対応するページを変更して、この中間ページ ChooseShopKPI をレンダリングします { パス: 'shopKPI', // 事前に背景データを取得しておけば、ここでストアデータにアクセスして直接判断できます // ただし、この特定のビジネスページのデータはグローバルストアに配置され、他の場所では使用されないため、実際には不要です - コンポーネント: () => import('@/views/store/dataVersion'), + コンポーネント: () => import('@/views/store/ChooseShopKPI'), 名前: 'store_KPI', メニュー名: 'ショップアドバイザー', メタ: { コード: ['storeProduct.detail'] } } これにより、期待どおりの機能が実現されます。 機能は実現したが、改めて考えてみたこの方法は、ページ コンポーネントを動的に読み込むという問題を非常にうまく解決します。しかし、いくつかの小さな問題も発生しました。
最終ソリューション - 高レベルコンポーネントChooseXXXを抽象化してDynamicLoadComponentに変換する <!-- DynamicLoadComponent.vue --> <テンプレート> <コンポーネント:is="comp" /> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'DynamicLoadComponent', 小道具: { レンダリングコンポーネント: { タイプ: 約束、 }, }, データ() { 戻る { comp: () => this.renderComponent } }, マウント() {}, }; </スクリプト> <style lang="css" スコープ></style> ルーティング構成でバックグラウンドデータを直接取得し、ルートを配布します。このように、ルーティング ロジックはルーティング構成ファイルに集中しており、セカンダリ ルーティングは存在しません。メンテナンスは面倒ではありません。 DynamicLoadComponent コンポーネントも再利用でき、バックグラウンド データの読み込みページを決定するための後続のルーティング構成をこの中間コンポーネントに送信できます。 { パス: 'shopKPI', コンポーネント: () => import('@/views/store/components/DynamicLoadComponent'), 名前: 'store_KPI', メニュー名: 'ショップコンサルタント', メタ: { コード: ['storeProduct:detail'], }, プロパティ: (ルート) => ({ レンダリングコンポーネント: 新しい Promise((resolve, deny) => { getStoreReportFormVersion() .then((レスポンスデータ) => { レスポンスデータに新しいショップKPI を追加します。 定数useOldShopKPI = get( レスポンスデータ、 'データ.データ.ストア_データ_表示' ); (新しいショップKPIを使用する場合) { 解決します(インポート('@/views/store/ShopKPI')); } そうでない場合 (OldShopKPI を使用) { 解決します(インポート('@/views/store/dataVersion')); } それ以外 { 解決します(インポート('@/views/store/ShopKPI/NoKPIService')); } }) .catch(拒否); })、 }) } オンラインサンプルを表示(Chrome のみサポート) これで、Vue Router がバックグラウンド データに応じて異なるコンポーネントをロードする方法についての説明は終わりです。Vue Router がバックグラウンド データに応じて異なるコンポーネントをロードする方法についての詳細は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL 5.7 でパスワードを変更するときに発生する ERROR 1054 (42S22) の解決方法
>>: MySQL サーバー ログイン エラー ERROR 1820 (HY000) の解決方法
前回の Docker に関する記事では、MAC システムでの構築について説明しました。この記事では、...
1.1 nginxインストールパッケージとインストールスクリプトをクライアントにコピーし、スクリプト...
いくつかの理由(好奇心も含む)から、数週間前に Linux デスクトップとして Xfce を使い始め...
序文IE の将来のすべてのバージョンで Web ページの外観が一貫していることを保証するために、IE...
実験環境:物理マシン Windows 10 x64物理NIC情報IPv4 アドレス: 192.168...
目次方法1 1. 構成とインストールの手順:方法2方法3要約する方法1 1. 構成とインストールの手...
この記事では主に、Vue でシンプルな無限ループスクロールアニメーションを実装し、みんなで共有する例...
目次0. システムに付属するカーネルツリー1. 環境設定最初のステップステップ2 2. ソースコード...
参照ドキュメント公式 Docker インストール ドキュメント: https://docs.dock...
質問:最近、プロジェクトの統計を行っていたときに、テーブルを上下にスクロールしたときにテーブルの先頭...
目次関数基本的なクエリ関数クエリ条件の初期化ページのレンダリングクエリと表示の最適化をさらに強化プル...
参考までに、クリックナンバーゲームをネイティブJSで実装しました。具体的な内容は以下のとおりです。最...
注意 ノーブレークスペース = ノーブレークスペース、 iexcl ¡ &...
目次序文1. 新しいVueプロジェクトを作成する2. WebStormの設定1. デバッガポートを設...
コードをコピーコードは次のとおりです。 <iframe id="myFrameId&...