2013-11-08 2 views
0

фоне того, как я инициализацией мое AngularJS приложение здесь: SCRIPT5022: 10 $digest() iterations reached. Aborting! and redirecting to index.htmlПеренаправление от Angular JS не работает для URL с хэш '#'

Summery Проблема

Когда я делаю window.location = $ scope.myReturnUrl, и если URL-адрес возврата содержит «#», вместо перезагрузки страницы AngularJS фиксирует изменение URL-адреса и отправляется в .otherwise часть настройки поставщика маршрутов, а приложение Angular App загружается усиление. Но я ожидаю, что он перенаправит указанный URL.

Кратко о том, как я это делаю:

Я загрузка моего AngularJS приложения внутри Bootstrap Modal, это как я инициализировать

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 установлен ложь для всех модулей:

$locationProvider.html5Mode(false) 

Так что, когда мое приложение инициализации URL выглядеть примерно так:

http://my-site.uk/user/dashboard.html#/mywork/find/id/9780273651

Теперь есть кнопка отмены в диалоговом окне Модального, нажмите на которой я улавливать через нг-клик, и при нажатии, он просто сделать переназначение что-то вроде

window.location = $rootScope.returnToUrl; 

сейчас, в моем случае, возвращение URL содержит идентификатор ссылки, которая была нажата, так что браузер может перейти к конкретному разделу, возвращение 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 часть настройки провайдера маршрутов и снова загружается приложение Angular. Но я ожидаю, что он перенаправит указанный URL.

Я использовать html5mode (правда), что обусловлено историческим причинам (о которых говорилось в этой теме: SCRIPT5022: 10 $digest() iterations reached. Aborting! and redirecting to index.html)

Я не хочу, чтобы удалить # из моего возвращения URL, потому что это нарушит процесс. Любое предложение, как преодолеть это?

Спасибо,

Равиш

ответ

0

Так это звучит, как вы хотите http://my-site.uk/user/dashboard.html#my-work1 перенаправить вас dashboard.html и перейдите к элементу с id="my-work1".

Возможно, вы захотите ознакомиться с сервисом $anchorScroll (http://docs.angularjs.org/api/ng. $ AnchorScroll). Я не уверен, как это работает, так как мне никогда не нужно было его использовать, но я знаю, что он решает такие проблемы, как ваш.

+0

есть когда-то проблемы, хотя, если я пытаюсь страницу, которая не является «AngularJS» App? Я хочу сказать, что я хочу прокрутить этот раздел, но эта страница не является AngularJS. Я использую 'window.location = MY_REDIRECT_URL' для перенаправления на некоторую страницу. URL-адрес перенаправления содержит ** ** **, но должен быть способ «рассказать» AngularJS, которые не прослушивают/^ these_urls [-] */i,? – Ravish

+0

Я решил проблему, используя работу, я отвечу на свой вопрос с подробностями. спасибо за ваш ответ – Ravish

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 

Я надеюсь, что это решить вашу проблему

+0

@ ops-rio есть проблема, хотя, что, если я пытаюсь перейти на страницу, которая не является «AngularJS» App? Я хочу сказать, что я хочу прокрутить этот раздел, но эта страница не является AngularJS. Я использую 'window.location = MY_REDIRECT_URL' для перенаправления на некоторую страницу. URL-адрес перенаправления содержит ** ** **, но должен быть способ «рассказать» AngularJS, которые не прослушивают/^ these_urls [-] */i,? – Ravish

+0

@RavishTiwari вы могли бы создать jsfiddle? –

+0

Позвольте мне посмотреть, смогу ли я создать один – Ravish

Смежные вопросы