[$controller:ctrlreg] 使用angularjs的路由及ocLazyLoad导致控制器未定义的问题

根目录下定义了总控制文件app.js
然后又在不同目录的子文件夹下定义了页面所用的controller文件,如product.js等等
在app.js中声明的代码大致如下(节选)

var sdWan = angular.module('sdWan', ['ngResource', 'ngRoute', 'oc.lazyLoad'])
    .config(function ($resourceProvider) {
        $resourceProvider.defaults.stripTrailingSlashes = false;
    })
    .config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
        $routeProvider
            .when('/', {
                templateUrl: "pages/home.html",
                controller: "homeCtrl",
                resolve: {
                    deps: ['$ocLazyLoad',
                        function ($ocLazyLoad) {
                            return $ocLazyLoad.load({
                                files: [
                                    'pages/home.js'
                                ]
                            });
                        }
                    ]
                }
            })
            .when('/devicesManage/deviceList', {
                templateUrl: "pages/devicesManage/deviceList/deviceList.html",
                controller: "devCtrl",
                resolve: {
                    deps: ['$ocLazyLoad',
                        function ($ocLazyLoad) {
                            return $ocLazyLoad.load({
                                files: [
                                    'pages/devicesManage/deviceList/deviceList.js'
                                ]
                            });
                        }
                    ]
                }
            })

            .otherwise({
                redirectTo: '/'
            })
    }]);

如代码所示,不同的页面不同的controller,并在相应页面上增加了ng-controller="名称"。
并在相应页面引入的js中,定义了该controller,如以下代码(pages/home.js)所示:

sdWan.controller('homeCtrl', function ($scope) {})  // 无法定义
console.log(sdWan)  // 正常打印

而且这些JS确实是被加载到文档中的,奈何在controller里的代码无法执行,并且会报
[$controller:ctrlreg] The controller with the name 'homeCtrl' is not registered.
在此文件下console.log(sdWan)是可以获取到sdWan的。但是定义controller就会出现问题。

请问我该怎么解决?
谢谢了。

阅读 4.4k
2 个回答
新手上路,请多包涵

return $ocLazyLoad.load({

name:"你的APP" ,
files: [
    'pages/home.js'
]

});
// 在你的files前面加上你的主应用模块的名称

同样遇到了该问题,不过是使用的ui-router实现的路由,不过替换了ui-router 版本的js文件就不会出错。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题