使用AngularJS重定向


86

我正在尝试使用以下方法重定向到另一条路线:

$location.path("/route");

但是由于某种原因,它不起作用。我使用jQuery-UI做了一个自动完成的小部件,一旦用户选择了一个选项,我就从作用域中调用了一个函数。我调试了它,然后它进入了函数,但是它从未重定向到其他路由。当我按下一个键时,它只会改变路线。

我认为这很奇怪,但是我还没有弄清楚如何解决这个问题。我用了

window.location = "#/route";

它可以工作,但我想使用该path()功能。

有人知道为什么会这样吗?

Answers:


109

通过一个不起作用的代码示例,可以很容易地回答这个问题,但是有了这些信息,我能想到的最好的就是您在AngularJS摘要之外调用$ location.path。

尝试在指令上执行此操作 scope.$apply(function() { $location.path("/route"); });


非常感谢您,对于未能发布无法正常工作的示例,我们深感抱歉。但这就是我的代码所需要的。
Tomarto

23
任何想法如何让它在$ http请求内的.success方法中起作用?@Tomarto
Nicholas Kreidberg

2
在firefox(30〜)控制台上触发$ apply循环繁忙的错误
svarog

1
这应该如何工作?我收到以下错误:错误:[$ rootScope:inprog] $已经在进行中应用errors.angularjs.org/1.2.15/$rootScope/inprog?p0=%24apply 在angular.js:78 .....因此,它不能作为windows.location =''..
Vaibhav

1
@NicholasKreidberg有相同的问题,只是添加了$ scope。$ apply();。在$ location.path(“ / route”)之后;为我工作。
Ernesto Allely,2016年


20

假设您没有使用html5路由,请尝试$location.path("route")。这会将您的浏览器重定向到#/route您想要的浏览器。


15

如果您需要重定向到角度应用程序之外,请使用$window.location。那是我的情况;希望有人会发现它有用。


2

检查您的路由方法:

如果您的路由状态是这样的

 .state('app.register', {
    url: '/register',
    views: {
      'menuContent': {
        templateUrl: 'templates/register.html',
      }
    }
  }) 

那你应该用

$location.path("/app/register");

0

不知道您的代码就很难说。我最好的猜测是,onchange当您从JavaScript代码更改文本框值时,不会触发该事件。

有两种方法可以起作用:第一个是onchange自己打个电话,第二个是等待文本框失去焦点。

检查这个问题; 相同的问题,不同的框架。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.