我创建了一个 AngularJS 服务,它动态地将一个 div 插入到 DOM 中,其中包含来自模板的内容和一个处理模板中的绑定和指令的自定义控制器。名为 的服务myService
允许您传入 thetemplateUrl
和controllerName
as 选项。下面是简化的代码:
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);
}
我在 DOM 上有一个单独的控制器来处理ng-click
几个锚标记:
<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 中的错误吗?如果是这样,在修复该错误之前,我是否可以使用解决方法?
编辑:这是一个演示问题的笨拙。