Angularjs 如何使用requirejs在angular应用程序中要求dojox?

Angularjs 如何使用requirejs在angular应用程序中要求dojox?,angularjs,require,dojo,Angularjs,Require,Dojo,我必须面对一个巨大的angularjs应用程序,它的UI部分将由dojo实现 我的项目是angularjs应用程序,其结构如下: 公开的 剧本 自由基 棱角的 道场 道场 迪吉特 多约克斯 require.js 模块 sub-directive1.js sub-directive2.js sub-app.js main.js index.html 在index.html文件中 <script data-main="scripts/main" src="scripts

我必须面对一个巨大的angularjs应用程序,它的UI部分将由dojo实现

我的项目是angularjs应用程序,其结构如下:

  • 公开的
    • 剧本
      • 自由基
        • 棱角的
        • 道场
          • 道场
          • 迪吉特
          • 多约克斯
        • require.js
      • 模块
        • sub-directive1.js
        • sub-directive2.js
        • sub-app.js
      • main.js
    • index.html
在index.html文件中

<script data-main="scripts/main" src="scripts/libs/require.js"></script>
在文件sub-app.js中

define([...], function (...) {

    var app = angular.module("subApp",["ngRoute"]);

    app.config([
        //config something

    ]);
    app.run([
        // do something in runing phase
    ]);

    return app;
});
在sub-directive1.js文件中,我需要dijit/Calendar为sub-directive1创建一个日历小部件。它工作得很好,requirejs可以很容易地找到“dijit/Calendar”

在sub-directive2.js文件中,我需要dojox/charting/Chart在sub-directive2中创建一个柱状图。但它无法工作,我的浏览器输出: 加载资源失败:服务器响应状态为404(未找到)

我想知道为什么requirejs可以正确地找到diji路径,但不能正确地找到dojox路径?它认为dojox是一个javascript文件,而不是一个目录。 这就是我困惑的地方

好的。 没有人回应。 我自己克服了它。 当我们想要使用requirejs来要求dojo/dijit/dojox时,我们应该执行两个步骤

  • 不使用realease代码而不是开发源代码
  • 使用包配置dojo不使用路径

    套餐:[ { 名称:“dojo”, 位置:“libs/dojo/dojo” }, { 名称:“dijit”, 位置:“libs/dojo/dijit” }, { 名称:“dojox”, 位置:“libs/dojo/dojox” } ],

  • define([...], function (...) {
    
        var app = angular.module("subApp",["ngRoute"]);
    
        app.config([
            //config something
    
        ]);
        app.run([
            // do something in runing phase
        ]);
    
        return app;
    });
    
    define([
        "./sub-app"
    ], function(app) {
    
        app.directive("subDirective1",
            function() {
                return {
                    restrict: "E",
                    replace: true,
                    link: function (scope, iElement, iAttrs){
                        ......
                        require([
                            "dijit/Calendar",
                            "dojo/date",
                            "dojo/domReady!"
                        ], function(Calendar, date){
                            new Calendar({
                                value: new Date(),
                                isDisabledDate: function(d){
                                    var d = new Date(d); d.setHours(0, 0, 0, 0);
                                    var today = new Date(); today.setHours(0, 0, 0, 0);
                                    return Math.abs(date.difference(d, today, "week")) > 0;
                                }
                            }, iElement);
                        });
                    }
                }
            }
        );
    });
    
    define([
            "./sub-app"
        ], function(app) {
    
            app.directive("subDirective2",
                function() {
                    return {
                        restrict: "E",
                        replace: true,
                        link: function (scope, iElement, iAttrs){
                            ......
                        require(["dojox/charting/Chart",
                            ......
                            "dojo/ready"],
                            function(Chart, Default, Lines, Wetland, ready){
                                ready(function(){
                                    var c = new Chart("chart3");
                                    .....
    
                                    iElement.append(chart1);
    
                                });
                            });
                        }
                    }
                }
            );
        });