18

当用户输入正确的用户名和密码时,我想重定向到另一个位置。但是当我$location.path('dashboard')在这里使用时,浏览器的 URL 被更改但该页面未加载。当使用 ctrl+R 刷新我的页面或单击浏览器的刷新图标时,将加载适当的页面。

$http.post('/login', $scope.userInfo)
        .success(function (data) {
            //Check if the authentication was a success or a failure
            //Successful POST here does not indicate success of authentication
            if (data.status === "authentication success") {

                //Proceed to load the dashboard for the user                    
                $location.path('/dashboard');

            } else if (data.status === "authentication error") {
                //Inform user of the error
                $scope.errorMessage = data.error;
                $scope.showErrorMessage = true;
            }

        })
        .error(function (error) {
            $scope.errorMessage = "Error while attempting to authenticate. Check  log.";
            $scope.showErrorMessage = true;

        });
    };

}]);
4

7 回答 7

24

之后您是否尝试过使用 $scope.$apply ?例如。:

if(!$scope.$$phase) $scope.$apply()

这个简短的方法也经常派上用场:

https://github.com/yearofmoo/AngularJS-Scope.SafeApply

于 2013-11-28T13:21:31.787 回答
14

引用https://docs.angularjs.org/guide/$location

"$location 服务只允许您更改 URL;它不允许您重新加载页面。当您需要更改 URL 并重新加载页面或导航到其他页面时,请使用较低级别的 API,$window .location.href。”

因此,例如,而不是使用: $location.path("/path/to/something");

用这个: $window.location.href = "/path/to/something";

$window.location.href将更改 URL加载新页面。

希望有帮助。

于 2015-10-31T07:30:18.450 回答
5

如果您没有 $scope(例如在服务的情况下),那么您可以使用

 $location.path('/path');
 if (!$rootScope.$$phase) $rootScope.$apply();
于 2014-04-25T11:45:11.660 回答
3

试试这个(不要忘记注入 $timeout):

$timeout(function () {
   $location.path('/dashboard'); 
}, 0);
于 2016-03-21T12:06:08.770 回答
0

使用 $timeout(function){} 这将起作用

于 2017-11-06T22:41:11.947 回答
-2

利用$rootScope.$evalAsync

例如:

$rootScope.$evalAsync(function() {
     $location.path('/dashboard'); 
});
于 2015-07-11T06:20:02.440 回答
-6

尝试:

 $location.path('/dashboard');
 $location.reload();
于 2014-04-23T13:35:28.900 回答