Javascript $locationPath导致错误:[$rootScope:inprog]
我需要在我的angular js webapp中切换视图 为了处理路由,我使用$stateProvider,如下所示: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', {
.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)