我正在初始化我的AngularJS应用程序的背景如下: SCRIPT5022: 10 $digest() iterations reached. Aborting! and redirecting to index.html
总结性问题
当我执行 window.location = $ scope.myReturnUrl 时,如果返回网址包含“#”,而不是重新加载页面,AngularJS会捕获网址更改并转到 .otherwise 部分路由提供程序设置,并再次加载Angular App。但是,我希望它能重定向到指定的URL。
简要介绍我如何做到这一点:
我在Bootstrap模式中加载我的AngularJS应用程序,这是我初始化的方式
var markup = '<div id="ng-app" ng-app="myapp" xmlns:ng="http://angularjs.org"><div ng-controller="MyAppAppCtrl"><div ng-view></div></div></div>';
jQuery('#works-modal').html(markup);
angular.bootstrap(jQuery('#ng-app'), ['myapp']);
jQuery('#works-modal').modal('show');
在我的app.js中,所有模块的html5mode都设置为false:
$locationProvider.html5Mode(false)
因此,当我的应用程序初始化时,网址看起来像:
http://my-site.uk/user/dashboard.html#/mywork/find/id/9780273651
现在,在Modal对话框上有一个取消按钮,单击我通过ng-click捕获的按钮,单击时,它只是执行重定向,如
window.location = $rootScope.returnToUrl;
现在,在我的情况下,返回网址包含被点击的链接的ID,以便浏览器可以滚动到特定部分,返回网址是:
http://my-site.uk/user/dashboard.html#my-work1
我的溃败提供商配置
$routeProvider.
when('/mywork/find/:id', {
templateUrl: '/mywork/partials/find/find.html',
controller: WorkCtrl
}).
when('/mywork/find/review/submit/:id', {
templateUrl: '/mywork/partials/review.html',
controller: ReviewCtrl
}).
otherwise({
redirectTo: '/mywork/find/id/'+id
});
问题
现在,当我尝试重定向到:http://my-site.uk/user/dashboard.html#my-work1时 而不是重新加载页面和滚动到指定的#ID,AngularJS正在捕获URL更改并重新加载应用程序。发生这种情况是因为,AngularJS捕获了网址更改,然后转到 .otherwise 部分路由提供程序设置,并再次加载Angular App。但是,我希望它能重定向到指定的URL。
由于历史原因,我使用html5mode(true)(在此主题中提到:SCRIPT5022: 10 $digest() iterations reached. Aborting! and redirecting to index.html)
我不想从我的返回网址中删除#,因为它会破坏工作流程。有什么建议如何克服这个?
谢谢,
奸污
答案 0 :(得分:0)
所以听起来您希望http://my-site.uk/user/dashboard.html#my-work1将您重定向到dashboard.html并滚动到包含id="my-work1"
的元素。
您可能需要查看$anchorScroll
(http://docs.angularjs.org/api/ng。$ anchorScroll)服务。我不确定它是如何工作的,因为我从来不需要使用它,但我知道它解决了你的问题。
答案 1 :(得分:0)
在您的网址(http://my-site.uk/user/dashboard.html#my-work1
)中尝试将'my-work1'传递给routeProvider中的参数,例如http://my-site.uk/user/dashboard.html/my-work1
。
示例:
when('/my/route/:param', {
templateUrl: '/mywork/partials/param.html',
controller: WorkCtrl
})
在控制器中,使用$ routeParams获取此参数。
var myParam = $routeParams.param
$location.hash(myParam)//set anchor
$anchorScroll()//do scroll
我希望这能解决你的问题