admin管理员组

文章数量:1558041

分享一个卡了我好几个小时的报错。

报错信息

Error: [ng:areq] http://errors.angularjs/1.3.10/ng/areq?p0=userRequestController&p1=not%20aNaNunction%2C%20got%20undefined

错误代码

以上错误是我在自定义一个angular路由时出现的,之前代码如下:

.state('userRequestController', {
    url: "/ossapp/zk/synchronized.html",
    templateUrl: "views/request/userRequest.html",
    params: {reqUrl: null, backUrl: null},
    data: {pageTitle: '同步开关'},
    controller: "userRequestController",
    resolve: {
        deps: ['$ocLazyLoad', function ($ocLazyLoad) {
            return $ocLazyLoad.load([{
                insertBefore: '#ng_load_plugins_before',
                files: [
                    'js/scripts/modules/request/userRequestController.js'
                ]
            }]);
        }]
    }
})

官方错误解释

去angularjs错误信息文档查了下(文档地址),给出的错误提示如下:

DESCRIPTION


AngularJS often asserts that certain values will be present and truthy using a helper function. If the assertion fails, this error is thrown. To fix this problem, make sure that the value the assertion expects is defined and truthy.

翻译成中文:

描述


AngularJS通常会断言某些值会出现以确保引用的函数是有用的。要想解决这个问题,请确保断言的值被正确的定义与引用。

排错阶段:

  1. 查看引用的controller与html模板地址正确无误
  2. 查看查看页面及控制器引用的名称无误
  3. 确保使用的所有依赖都没有引用错误
  4. 。。。
    错误找到这里,页面中的文字已经能够正确的显示出来,但是Error: [ng:areq]依然存在,虽然不影响页面但是这个错误依然在控制台很刺眼(如果当时报的是个警告可能我就不管了)。

再往后就是排查了下引用的controller,引用无误,但是当我把路由中对控制器引用的代码注释掉发现错误消失了。突然明白

如果在路由中引用了控制器而页面中没有使用控制器,angularjs会检查这种这种引用从而断言这是一个无效的引用,从而抛出一个Error: [ng:areq]的错误。

也就是说,如果页面中暂时没有使用controller就先不要在路由中引用。在路由中注释掉controller: “userRequestController”即可

解决了这个莫名其妙的bug,真的感觉浑身酸爽,继续撸代码~~

END

本文标签: 断言错误NGareqAngular