Angularjs 在这种情况下,为什么我需要$timeout来更改位置?

Angularjs 在这种情况下,为什么我需要$timeout来更改位置?,angularjs,Angularjs,我有以下代码: angular.module('DemoApp') .controller('NavbarCtrl', ['$scope', '$rootScope', '$location', '$timeout', function($scope, $rootScope, $location, $timeout) { $scope.logout = function() { $rootScope.user = null; $location.path("/

我有以下代码:

angular.module('DemoApp')
  .controller('NavbarCtrl', ['$scope', '$rootScope', '$location', '$timeout', function($scope, $rootScope, $location, $timeout) {
    $scope.logout = function() {
      $rootScope.user = null;
      $location.path("/login");
    };
  }]);
问题是,当调用注销时,位置不会改变。但是,以下代码可以工作(请注意$timeout的使用):

有人能告诉我这是为什么吗

编辑: HTML如下所示,位于NavbarCtrl控制器元素内:

<a href="#" ng-click="logout()"><i class="fa fa-sign-out"></i><br/>Abmelden</a>


错误的地方在于HTML:
href=“#”
导致位置更改,
$location.path()
无法再次更改该位置。将HTML更改为
href=“”
将不再需要使用
$timeout

错误的是HTML:
href=“#”
会导致位置更改,而
$location.path()
无法再次更改该位置。将HTML更改为
href=“”
将不再需要使用
$timeout

错误的是HTML:
href=“#”
会导致位置更改,而
$location.path()
无法再次更改该位置。将HTML更改为
href=“”
将不再需要使用
$timeout

错误的是HTML:
href=“#”
会导致位置更改,而
$location.path()
无法再次更改该位置。将HTML更改为
href=“”
将不再需要使用
$timeout

$timeout with no delay用作黑客攻击,它将触发$digest循环^agree。我会尝试用$scope触发摘要循环。$apply()在您的$location.path(“/login”)调用之后。scope apply会导致一个异常,表示摘要已在进行中$timeout with no delay正在用作hack,它会触发$digest循环^agree。我会尝试用$scope触发摘要循环。$apply()在您的$location.path(“/login”)调用之后。scope apply会导致一个异常,表示摘要已在进行中$timeout with no delay正在用作hack,它会触发$digest循环^agree。我会尝试用$scope触发摘要循环。$apply()在您的$location.path(“/login”)调用之后。scope apply会导致一个异常,表示摘要已在进行中$timeout with no delay正在用作hack,它会触发$digest循环^agree。我会尝试用$scope触发摘要周期。在$location.path(“/login”)调用之后,$apply()会导致一个异常,表明摘要已经在进行中
<a href="#" ng-click="logout()"><i class="fa fa-sign-out"></i><br/>Abmelden</a>