0

我如何初始化我的 AngularJS 应用程序的背景在这里: SCRIPT5022: 10 $digest() 达到了迭代。中止!并重定向到 index.html

总结问题

当我执行window.location = $scope.myReturnUrl并且如果返回 URL 包含"#"时,AngularJS 不会重新加载页面,而是捕获 url 更改并转到.otherwise rout 提供程序设置的一部分,并且 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

现在,模态对话框上有一个取消按钮,单击我通过 ng-click 捕获的单击,当单击时,它只是执行类似的重定向

window.location = $rootScope.returnToUrl;

现在,在我的情况下,返回 url 包含被点击的链接的 id,以便浏览器可以滚动到特定部分,返回 url 是:

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 捕获了 url 更改并将其转到.otherwise rout 提供程序设置的一部分,并且再次加载了 Angular 应用程序。但是,我希望它重定向到指定的 URL。

由于历史原因,我正在使用 html5mode(true) (在此线程中提到:SCRIPT5022: 10 $digest() 达到了迭代。中止!并重定向到 index.html

我不想从我的返回 url 中删除 #,因为它会破坏工作流程。任何建议如何克服这个问题?

谢谢,

狂欢

4

2 回答 2

0

所以听起来您希望http://my-site.uk/user/dashboard.html#my-work1将您重定向到 dashboard.html 并滚动到带有id="my-work1".

您可能想看看$anchorScroll( http://docs.angularjs.org/api/ng .$anchorScroll) 服务。我不确定它是如何工作的,因为我从来不需要使用它,但我知道它可以解决像你这样的问题。

于 2013-11-08T15:56:41.277 回答
0

在您的 URL ( 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

我希望这能解决你的问题

于 2013-11-08T16:00:11.283 回答