0

私たちのチームは ServiceNow でアプリを開発しており、他のいくつかのウィジェットを埋め込む大きなウィジェットを作成しました。埋め込まれた各ウィジェットは独自のタブに含まれており、ng-switch を使用してそれぞれを切り替えています。ServiceNow には recordWatch と呼ばれるクライアント API があり、対応するバックエンド テーブルでエントリが追加/削除された場合、リロードせずにページのコンテンツを更新します。正しいタブが事前に選択されている場合にのみコンテンツが更新されるという問題が発生しています。

たとえば、作業履歴のタブがあります。すでに [作業履歴] タブにいて、バックエンドに新しいエントリを追加すると、そのタブのコンテンツはリロードせずに自動的に更新されます。ただし、同じことを行い、別のタブが開いている場合、それらの更新を表示するにはリロードする必要があります。

一度にすべてをロードして相関タブがクリックされるまで非表示になるのではなく、相関タブがクリックされたときにのみ ng-switch がレンダリングされることを確認したかったのです。前者が正しい場合、recordWatch が正しく機能するために ng-switch を放棄する必要がありますか? 要件を満たすために採用できる別の方法はありますか? ありがとう!

4

1 に答える 1

0

ngHide/ngShow と ngIf/ngSwitch には大きな違いが 1 つあります。ngHide は実際には css display:none を設定するだけですが、ngIf/ngSwitch は DOM から HTML を削除し、条件が満たされた場合にそれを読み込みます。https://stackoverflow.com/a/16742553/2157581

そのため、非アクティブな ngSwitch のすべてのウィジェットは実行されていません。

ウィジェットを ngSwitch から ngHide にかなり簡単に書き換えることができます。最初にそれを試してみてください。

ベスト プラクティスは、シングルトンであり、すべてのディレクティブ/ウィジェットにインポートできるサービスを作成することです。このサービスは、recordWatch ロジックを取り、ディレクティブのモデルを保持する必要があります。このように、新しいディレクティブに ngSwitch すると、実行中のサービスから最新のデータが使用されます。 https://fdietz.github.io/recipes-with-angular-js/controllers/sharing-code-between-controllers-using-services.html

于 2019-01-15T09:52:52.380 に答える