在回调方法中,RequireJS依赖项未定义

时间:2013-08-05 05:10:32

标签: javascript angularjs requirejs

我开始使用RequireJS,依赖项加载正常,但在回调方法中,所有依赖项都是undefined

require.config({
    baseUrl: 'js',
    paths: {
        angular: '../lib/angular/angular',
        myApp: 'app',
        states: 'app-states',
        controllers: 'controllers',
        filters: 'filters',
        services: 'services',
        oauth2: 'oauth2'
        //async: 'lib/require/async'
    },
    shim: {
        'myApp': {
            deps: ['angular']
        },
        'states' : {
            deps: ['angular', 'myApp']
        },
        'controllers': {
            deps: ['angular', 'myApp']
        },
        'filters': {
            deps: ['angular', 'myApp']
        },
        'services': {
            deps: ['angular', 'myApp']
        }       
    }
});

require(['angular', 'myApp', 'states', 'controllers', 'filters', 'services'], function(angular, myApp, states, controllers, filters, services) {
    'use strict';
    console.log('requireJs done');
    console.log(angular);
    console.log(myApp);
    angular.bootstrap(document, ['myapp']);
}); 

如果我只需要angular,则不会调用回调方法。我想知道为什么。

require(['angular', function(angular) {
    console.log("requireJS done");
}]);

3 个答案:

答案 0 :(得分:1)

您的语法错误,依赖数组应该是第一个参数。

尝试

require(['angular'], function(angular) {
    console.log("requireJS done");
});

答案 1 :(得分:1)

您没有从这些库中导出任何值。对于填充程序,您需要在引用它们之前指定要导出的变量。由于您没有导出任何内容,因此变量设置为null。

导出如下:

shim: {
    "angular": {
        exports: "angular"
    }
}

AMD / Requirejs通过从其加载的文件中提取一个值并将其设置为回调函数中的命名参数来工作。对于普通的AMD文件,无论传递给define的函数的返回值是什么,或者是define中的对象。但是对于垫片,你需要选择一个变量,通常是libary的命名空间。这允许您模拟AMD基于命名空间的库

您可以查看documentation section on shims了解更多详情。

答案 2 :(得分:0)

我必须导出一些库,才能在我的回调中使用。

shim: {
    'angular': {
        exports: 'angular'
    }
}