Javascript $locationPath导致错误:[$rootScope:inprog]

Javascript $locationPath导致错误:[$rootScope:inprog],javascript,angularjs,routes,Javascript,Angularjs,Routes,我需要在我的angular js webapp中切换视图 为了处理路由,我使用$stateProvider,如下所示: .config(['$httpProvider', '$stateProvider', '$urlRouterProvider', function ($httpProvider, $stateProvider, $urlRouterProvider) { $stateProvider .state('common', {

我需要在我的angular js webapp中切换视图

为了处理路由,我使用$stateProvider,如下所示:

.config(['$httpProvider', '$stateProvider', '$urlRouterProvider', function ($httpProvider, $stateProvider, $urlRouterProvider) {
        $stateProvider
            .state('common', {
                templateUrl: 'assets/html/template.html',
                abstract: true,
            })
            .state('login', {
                url: '/login',
                parent: 'common',
                templateUrl: 'app/models/authentication/views/login.html',
                controller: 'LoginController'
            })
            .state('home', {
                url: '/',
                parent: 'common',
                templateUrl: 'app/models/home/views/home.html',
                controller: 'HomeController'
            })
            ...
在我的登录控制器中,我正在尝试切换视图(从登录切换到主页)

但是当我到达$location.path('/home');我得到这个错误:

Error: [$rootScope:inprog] http://errors.angularjs.org/1.4.8/$rootScope/inprog?p0=%24digest
    at Error (native)
    at http://localhost:3000/adminTool/assets/js/angular.min.js:6:416
    at t (http://localhost:3000/adminTool/assets/js/angular.min.js:126:132)
    at r.$apply (http://localhost:3000/adminTool/assets/js/angular.min.js:133:515)
    at http://localhost:3000/adminTool/app/models/authentication/controllers.js:46:32
    at http://localhost:3000/adminTool/assets/js/angular.min.js:119:129
    at r.$eval (http://localhost:3000/adminTool/assets/js/angular.min.js:133:313)
    at r.$digest (http://localhost:3000/adminTool/assets/js/angular.min.js:130:412)
    at r.$apply (http://localhost:3000/adminTool/assets/js/angular.min.js:134:78)
    at g (http://localhost:3000/adminTool/assets/js/angular.min.js:87:444)
我做错了什么?如何摆脱它并最终切换视图

我阅读使用$apply from


PS:我对angular(

非常陌生。您得到的错误是由于
$scope.$apply
围绕
$location.path('/home')
语句。Angular已经在摘要循环中,因此在该循环中再次触发它(通过调用
$apply
)将导致此错误。删除
$scope.$apply
可能会解决您的问题

摘要循环已经触发的原因是您可能正在使用
$http
服务,该服务使用承诺返回值。解决此承诺时,Angular始终会触发摘要


但除此之外,您可能希望使用
$state
服务移动到另一个状态,而不是使用
$location
服务移动到另一个位置
$state.go('home')
可能就是您要找的。

我认为问题出在这里
$location.path('home')
您没有路径
/home
您的状态名为
home

所以您需要转到
$location.path('/')
或inject
$state
并使用方法
$state.go('home')
,也不需要将其包装在
$apply

中为什么要使用
$apply
您想更改可以注入的状态
$state
并调用“$state.go('home”)您发布的代码中没有显示
/home
路线。您有一条
/
路线,它是
主页
状态。您还没有显示
.otheris()
子句,但据猜测,它可能会返回到
/login
路由,并且由于您没有
/home
路由,因此您陷入了一个无休止的循环中。为什么不使用$state.go('home')而不是$apply呢。
Error: [$rootScope:inprog] http://errors.angularjs.org/1.4.8/$rootScope/inprog?p0=%24digest
    at Error (native)
    at http://localhost:3000/adminTool/assets/js/angular.min.js:6:416
    at t (http://localhost:3000/adminTool/assets/js/angular.min.js:126:132)
    at r.$apply (http://localhost:3000/adminTool/assets/js/angular.min.js:133:515)
    at http://localhost:3000/adminTool/app/models/authentication/controllers.js:46:32
    at http://localhost:3000/adminTool/assets/js/angular.min.js:119:129
    at r.$eval (http://localhost:3000/adminTool/assets/js/angular.min.js:133:313)
    at r.$digest (http://localhost:3000/adminTool/assets/js/angular.min.js:130:412)
    at r.$apply (http://localhost:3000/adminTool/assets/js/angular.min.js:134:78)
    at g (http://localhost:3000/adminTool/assets/js/angular.min.js:87:444)