在require函数中定义(requireJS)

时间:2014-04-22 12:04:19

标签: angularjs requirejs angular-amd

(使用requireJS,angularJS,angularAMD)

在我的main.js文件中,我有:

require.config({
    baseUrl: "js",
    paths: {
        'angular': 'libs/angularjs/angular.min',
        'angularAMD': 'libs/angularjs/angularAMD.min'
    },
    shim: {
        'angularAMD': ['angular']
    }
});

define(['angularAMD'], function (angularAMD) {
    var app = angular.module("app", []);
    app.controller("testCtrl", function ($scope) {
        $scope.message = "udało się!";
    });
    angularAMD.bootstrap(app);
    return app;
});
一切正常。 但是当我将配置部分切换到其他文件时,我遇到了错误:

main.js:

require(['common'], function (common) {
    define(['angularAMD'], function (angularAMD) {
        var app = angular.module("app", []);
        app.controller("testCtrl", function ($scope) {
            $scope.message = "udało się!";
        });
        angularAMD.bootstrap(app);
        return app;
    });
});

common.js

require.config({
    baseUrl: "js",
    paths: {
        'angular': 'libs/angularjs/angular.min',
        'angularAMD': 'libs/angularjs/angularAMD.min'
    },
    shim: {
        'angularAMD': ['angular']
    }
});

我可以在require函数中使用define吗?如果不是如何首先包含通用配置然后使用define?

1 个答案:

答案 0 :(得分:2)

我假设您的main.js文件是您为加载RequireJS的data-main标记上的<script>属性提供的文件,或者它是您的应用程序的主要入口点。将main.js更改为:

require(['common'], function (common) {
    require(['app']);
});

在代码可以轻松加载的位置创建一个app.js模块:

define(['angularAMD'], function (angularAMD) {
    var app = angular.module("app", []);
    app.controller("testCtrl", function ($scope) {
        $scope.message = "udało się!";
    });
    angularAMD.bootstrap(app);
    return app;
});

任何需要访问您在此模块中创建的app值的内容都只需要app模块。

问题中的代码定义了一个模块,但它是异步的。当调用define时,RequireJS已经完成加载main。就其而言,main已完成。那么它应该给定义的模块命名?