uiRouter:' 10 $ digest()迭代到达'在$ state.go(...)中的changeStateStart期间

时间:2015-05-30 09:15:10

标签: angularjs angular-ui-router

我的路由器配置如下:

function Router($injector) {
    $injector.get('$locationProvider').html5Mode({
        enabled: true,
        requireBase: false
    });
    $injector.get('$stateProvider')
        .state('login', {
            url: '/login',
            templateUrl: 'app/components/login/login.html'
        })
        .state('auth', {
            abstract: true,
            templateUrl: 'app/layout/layout.html'
        })
        .state('auth.home', {
            url: '/home',
            templateUrl: 'app/components/home/home.html',
            auth: true
        });

   $injector.get('$urlRouterProvider').otherwise('/home');
}

run块配置如下:

function stateChangeHandler(event, toState, toParams) {
    var injector = this.$injector;

    function inject(name) {
        return injector.get(name);
    }

    if (
        toState.auth && 
        !inject('AuthService').isAuthenticated()
    ) {
        event.preventDefault();
        inject('$state').go('login');
    } else if (
        !toState.auth &&
        inject('AuthService').isAuthenticated()
    ) {
        event.preventDefault();
        inject('$state').go('auth.home');
    }
}

function RouterRun($injector) {
    $injector.get('$rootScope').$on('$stateChangeStart',
        stateChangeHandler.bind({
            $injector: $injector
        }));
}

//更新

所有在一起:

angular.module('router', ['ui.router'])
    .config(Router)
    .run(RouterRun);

angular.module('app', [..., 'router']);

当我在地址栏中输入主机172.16.16.114:8080并且用户未经过身份验证后,我就会

Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.3.15/$rootScope/infdig?p0=10&p1=%5B%5D

at REGEX_STRING_REGEXP (angular.js:63)
at Scope.$get.Scope.$digest (angular.js:14346)
at Scope.$get.Scope.$apply (angular.js:14571)
at bootstrapApply (angular.js:1455)
at Object.invoke (angular.js:4203)
at doBootstrap (angular.js:1453)
at bootstrap (angular.js:1473)
at angularInit (angular.js:1367)
at HTMLDocument.<anonymous> (angular.js:26304)
at jQuery.Callbacks.fire (jquery.js:3099)

但最后我到达目标login页面,地址为172.16.16.114:8080/login

我无法找出发生此错误的原因。请帮助提出任何建议。

1 个答案:

答案 0 :(得分:0)

Yeoman gulp-angular生成器创建gulp任务,默认情况下不包括html中生成的模板缓存模块,因此所有模板请求都发送到服务器,而不是通过缓存模块。通过在登陆html问题中添加生成的文件来改变gulp任务后解决了。