テンプレートからのコンテンツを含む div を DOM に動的に挿入する AngularJS サービスと、テンプレート内のバインディングとディレクティブを処理するカスタム コントローラーを作成しました。と呼ばれるサービスを使用すると、およびをオプションとしてmyService
渡すことができます。以下は単純化されたコードです。templateUrl
controllerName
function display(id, templateUrl, controllerName) {
var scope = $rootScope.$new();
scope.id = id;
var element = angular.element('<div ng-include="\'' + templateUrl + '\'"></div>');
var controller = $controller(controllerName, {$scope: scope});
element.contents().data('$ngControllerController', controller);
$compile(element)(scope);
parentElement.append(elem);
}
ng-click
複数のアンカー タグを処理する DOM に別のコントローラーがあります。
<a ng-click="handleClick(record.id, record.templateUrl, record.controllerName)">Click Me</a>
私は a を使用しておらず$routeProvider
、アンカータグに href 属性も id 属性もありません。クリック関数はカスタム サービスを呼び出して div をレンダリングします。
$scope.handleClick = function($event, id, templateUrl, controllerName) {
myService.display(id, templateUrl, controllerName);
};
ページが Chrome ブラウザーに読み込まれ、下にスクロールして のリンクng-click
が表示されるようにし、リンクをクリックすると、ブラウザーがページの上部にスクロールします。ページをスクロールしたくありません。リンクの横に div を表示するだけです。場所の URL に変更はありません。下にスクロールすると、新しい div が表示されます。で別のリンクをクリックすると、ng-click
スクロールは行われません (これは最初のクリックでも必要でした)。ページを更新すると、どのリンクを最初にクリックしても関係なく、最初のクリックで常にブラウザがビューポートの上部にスクロールして戻ります。
新しい要素にディレクティブを配置せず、ng-include
代わりにテンプレートの HTML をサービスにハードコーディングすると、最初のクリックでページの上部にスクロールしません。
ngInclude のドキュメントには、オプションの属性を指定できると記載autoscroll
されており、属性が設定されていない場合は「自動スクロールが無効になる」と記載されています。そうではないようです。自動スクロールを「false」に設定しようとしましたが、それは役に立ちませんでした。
$anchorScrollProvider.disableAutoScrolling()
すべての自動スクロールを無効にできることはわかっていますが、特定のタグの自動スクロールを無効にするにはどうすればよいですか? これは報告すべき Angular のバグですか? もしそうなら、そのバグが修正されるまで使用できる回避策はありますか?
編集:これは、問題を示すプランクです。