javascript - 使用 Webpack 延迟加载 AngularJS Controller

标签 javascript angularjs webpack commonjs

我正在使用 AngularJS 1.5.6 和 Webpack。

我的文件架构是:

app
|- scripts
|   |- modules
|       |- homepage
|          |- homepage.js
|          |- controller
|             |- HomepageController.js
|- app.js
|- index.html

webpack.config(如果您需要查看此文件的更多内容,请告诉我):

module.exports = {
    context : __dirname + "/app",
    entry : {
        main: "./app.js",
        vendor: [
            'angular',
            'angular-route'
        ]
    },
[...]
};

index.html包含js文件的导入:

<script type="text/javascript" src="vendor.js"></script>
<script type="text/javascript" src="main.js"></script>

apps.js中:

(function () {  
    'use strict';

    require('./scripts/modules/homepage/homepage');

    angular.module("NgAppProject", [
        'ngRoute',
        'ng',
        'Homepage'
    ]);
})();

homepage.js中:

(function () {
    'use strict';

    angular.module('Homepage', [
        'ngRoute',
        'ng'
    ])
    .config(['$routeProvider', '$controllerProvider', function($routeProvider, $controllerProvider) {
        $routeProvider
          .when('/home', {
            templateUrl: 'scripts/modules/homepage/views/homepage.html',
            controller: 'HomepageController',
            controllerAs: 'homepageController',
            resolve: {
                deps: function() {
                    return require.ensure([], function (require) {
                $controllerProvider.register("HomepageController", require('./controllers/HomepageController'));
                    }, '_homepage');
                }
            }
          });
    }]);
})();

问题:

当我启动应用程序并转到 localhost:8080/#/home 时,出现错误:

Error: [ng:areq] Argument 'HomepageController' is not a function, got undefined

我认为它找不到我的 Controller ,但我不明白为什么。

但是这工作正常:

angular.module('Homepage', [
    'ngRoute',
    'ng'
])
.config(//config here)
.controller("HomepageController", require('./controllers/HomepageController'));

我非常欢迎任何帮助,谢谢!

最佳答案

我认为 require.ensure 不会返回 promise 。所以,你可以尝试这个方法:

resolve: {
  deps: ['$q', function($q) {
    var deferred = $q.defer();
    require.ensure([], function(require) {
      $controllerProvider.register("HomepageController", require('./controllers/HomepageController'));
      deferred.resolve();
    }, '_homepage');
    return deferred.promise;
  }]
}

关于javascript - 使用 Webpack 延迟加载 AngularJS Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37737348/

相关文章:

javascript - 如何在 AngularJS 中控制台从 Controller 到指令 Controller 的更改

javascript - Jasmine angular - 模拟http请求

javascript - 测试 React Js 根组件

javascript - 使用 webpack 的独立 block 文件

javascript - "delete"- 恢复 native 函数不适用于已更改的原型(prototype),那怎么办?

javascript - 如果地理编码器返回 ZERO_RESULTS, map API v3 获取半径内最近的位置

javascript - 测试失败 - 多次调用 Mocha 的 done()

javascript - 将从元素的数据属性获得的字符串转换为json

javascript - 滚动时如何使 <li> 元素固定在 <ul> 元素的顶部和底部

asp.net - 分布式软件架构中的捆绑优化