メイン ビューの上にモーダル ウィンドウとして表示される詳細ビューを持つアプリを作成しています。それぞれにURLがありますが、URLから直接詳細ビューにアクセスする場合はメインビューとして表示したいです。この比喩は多くのアプリで使用されていますが、ピンタレストのピンは典型的な例です (ピンをクリックしてからページをリロードして違いを確認してください)。
私が収集したものから、通常のルーターはこれを処理するのに十分強力ではないため、ng-view を置き換える独自のディレクティブを作成しました。簡略化されたコード サンプルを次に示します。
app.directive('myModalView', ['$route', function($route) {
return {
link: function(scope, elem, attr) {
var data = { modal: false };
var first = true;
scope.data = data;
scope.$on('$routeChangeSuccess', function() {
var current = $route.current.$$route;
var template = current.templateUrl;
data.modal = current.modal && !first;
data.modal ? data.modalTemplate = template : data.mainTemplate = template;
first = false;
});
},
template: '<div ng-include src="data.mainTemplate"></div>' +
'<div ng-show="data.modal" ng-include src="data.modalTemplate"></div>',
};
}]);
2 つの質問:
- これは正しいアプローチですか?これを行うためのより「角度のある」方法はありますか?
- 上記のコードには重要な問題があります。2 つの URL が同じテンプレートを使用している場合、ng-include が更新されません。状況によっては、コントローラーが初期化時に URL パラメーターをチェックし、さまざまなデータをビューに提供しています。ng-include をリフレッシュしたり、コントローラーを再初期化したり、この状況を処理するために何か他のことを行う方法はありますか?
ありがとう!