Angularjs 路由更改在promise回调函数中不起作用

Angularjs 路由更改在promise回调函数中不起作用,angularjs,routes,Angularjs,Routes,我有一个登录屏幕,它接受用户名和密码,并根据web服务对它们进行身份验证。如果web服务返回“true”表示用户已通过身份验证,我希望将用户重定向到登录的主页。以下是此操作的代码: var-app=angular.module('app'); app.controller('loginCtrl',函数($scope,$location,UserService){ $scope.authUser=函数(){ UserService.AuthenticateUser($scope.Username,

我有一个登录屏幕,它接受用户名和密码,并根据web服务对它们进行身份验证。如果web服务返回“true”表示用户已通过身份验证,我希望将用户重定向到登录的主页。以下是此操作的代码:

var-app=angular.module('app');
app.controller('loginCtrl',函数($scope,$location,UserService){
$scope.authUser=函数(){
UserService.AuthenticateUser($scope.Username,$scope.Password)
.然后(函数(结果){
//检查HTTP响应的内容是否为“true”。
如果(result.data==“true”){
//Web服务返回“true”,表示用户已通过身份验证;因此,重定向到登录的主页。
$location.path(“/home”);
}否则{
//Web服务返回“false”,表示用户未经过身份验证。
警报(“身份验证失败”);
}
})
.catch(函数(){
警报(“尝试验证用户失败”);
});
};
});
app.factory('UserService',函数($http){
返回{
AuthenticateUser:函数(用户名、密码){
var url=“https:///”;
var请求={
“用户名”:用户名,
“密码”:密码
};
返回$http.post(url+'auth',request);
}
};
});
我的问题在于以下行:

$location.path(“/home”);
web服务工作正常,在调试器中命中该行,但没有发生路由更改。控制台中不会出现任何错误

这与摘要生命周期有关吗?承诺是如何起作用的?在应用程序的其他地方,路由可以正常工作,只是当我在$http调用后尝试使用它时,它才无法工作。这是改变视图的正确角度模式吗

路由:

$routeProvider
    .when('/home', {
        templateUrl: 'home.html'
    })
    .otherwise({
        templateUrl: 'login.html'
    });
$locationProvider.html5Mode(false);

更改url后,您需要添加
$scope.$apply()

$location.path("/home");
$scope.$apply()
$apply()用于从外部以角度执行表达式 角度框架。(例如,从浏览器DOM事件, setTimeout、XHR或第三方库)

但是,我建议您启用
HTML5模式
并使用angular
ui路由器

编辑

如果您得到“摘要已在进行中”,请将您的
$location.path
包装到
$timeout
中,记住先插入它

$timeout(function() {
  $location.path("/home");
}) 

然后,url更改将在下一个摘要周期中安全运行

你在用AngularUI路由器吗?还是默认angularjs路由模块?好问题…我使用的是默认路由器。angular中的一个名为angular-route.js。我对angular还比较陌生,所以在我的头上有一点。你的浏览器url改变了吗?或者,浏览器url会闪烁,但不会更改。它从#/login开始,闪烁,并保持在#/login。您有匹配“/home”的规则吗?你能粘贴你的路由器代码吗?如果我们使用ui路由器,我们是否必须将$location调用包装在$scope中。$apply()?@Rohan如果你在第三方lib函数中调用$location,是的。