Angularjs 来自Angular JS的重定向不适用于带有散列的URL'#';

Angularjs 来自Angular JS的重定向不适用于带有散列的URL'#';,angularjs,angularjs-routing,Angularjs,Angularjs Routing,我如何初始化AngularJS应用程序的背景如下: 夏季问题 当我执行window.location=$scope.myReturnUrl时,如果返回URL包含一个“#”,则AngularJS不会重新加载页面,而是捕获URL更改并转到。否则,将重新加载rout provider设置的一部分,并再次加载Angular应用程序。但是,我希望它重定向到指定的URL 简要说明我是如何做到这一点的: 我正在引导模式中加载我的AngularJS应用程序,这就是我初始化的方式 var markup = '&

我如何初始化AngularJS应用程序的背景如下:

夏季问题

当我执行window.location=$scope.myReturnUrl时,如果返回URL包含一个“#”,则AngularJS不会重新加载页面,而是捕获URL更改并转到。否则,将重新加载rout provider设置的一部分,并再次加载Angular应用程序。但是,我希望它重定向到指定的URL

简要说明我是如何做到这一点的:

我正在引导模式中加载我的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');
因此,当我的应用程序初始化时,url看起来像:

现在,在模态对话框上有一个取消按钮,单击我通过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
      });
问题

现在,当我尝试重定向到: AngularJS没有重新加载页面并滚动到指定的#ID,而是捕获URL更改并重新加载应用程序。发生这种情况的原因是,AngularJS捕获url更改并将其转到。否则,将重新加载rout provider设置的一部分,AngularJS应用程序。但是,我希望它重定向到指定的URL

由于历史原因,我正在使用HTML5模式(true)(本文中提到:)

我不想从我的返回url中删除#,因为它会破坏工作流。有什么建议可以克服这个问题吗

谢谢


Ravish

所以听起来您想重定向到dashboard.html并使用
id=“my-work1”
滚动到元素

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

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

我希望这能解决您的问题

@ops rio有一个问题,但如果我尝试创建一个不是“AngularJS”应用程序的页面,该怎么办?我的意思是,我确实想滚动到那个特定的部分,但是,整个页面不是AngularJS。我正在使用
window.location=MY\u REDIRECT\u URL
重定向到某个页面。重定向url恰好包含一个#,但是,应该有一种方法“告诉”AngularJS,它不侦听这些"url[-]*/i,@Ravishtivari你能创建一个JSFIDLE吗?让我看看我是否能创建one@ops-里约热内卢:我已经通过变通解决了我的问题,我将详细回答我的问题。谢谢你的回答有一个问题,但是,如果我试图打开一个不是“AngularJS”应用程序的页面怎么办?我的意思是,我确实想滚动到那个特定的部分,但是,整个页面不是AngularJS。我正在使用
window.location=MY\u REDIRECT\u URL
重定向到某个页面。重定向url恰好包含一个#,但是,应该有一种方法“告诉”AngularJS,它不侦听/^这些_url[-]*/i,我已经通过解决方法解决了我的问题,我将详细回答我的问题。谢谢你的回答
var myParam = $routeParams.param
$location.hash(myParam)//set anchor
$anchorScroll()//do scroll