【问题标题】:requirejs + angularjs code structure split in different filesrequirejs + angularjs 代码结构拆分在不同文件中
【发布时间】:2015-06-20 10:32:16
【问题描述】:

我正在使用 requirejs 和 Angular,我正在尝试创建一个应用程序结构,允许我将每个控制器/服务/指令等拆分到不同的文件中。这是我想要实现的结构:

src/
components/
    Navigation/
        index.js
        module.js
        NavigationController.js
        NavigationService.js

在 module.js 中我想做这样的事情:

define(['angular', './NavigationService', './NavigationController'], function (angular, NavigationService, NavigationController) {
    'use strict';
    return angular.module('Myapp.Navigation', [])
        .controller('NavigationController', NavigationController)
        .service('NavigationService', NavigationService)
});

并在单独的 js 文件中定义控制器/服务定义。

问题是我不知道如何定义这些文件。我试过这种语法:

//NavigationService.js
define( function() {

            this.doNavigation = function () {
                console.log('I am navigating');
            }
    });

但看起来不起作用。 你见过这种使用requirejs的结构吗?

谢谢!

【问题讨论】:

    标签: javascript angularjs requirejs


    【解决方案1】:

    试试:

    //NavigationService.js
    define([], function() {
        NavigationController.$inject = ['$scope', '$q', 'myOwnService', 'etc'];
        function NavigationController($scope, $q, myOwnService, etc) {
            ...
        }
        return NavigationController;
    });
    

    您可能也对angular-require-lazy感兴趣。

    【讨论】:

      【解决方案2】:

      其实,单应用的情况下不需要requirejs。角度的顶级层次结构是应用程序。所有应用程序都有其模块集,并且 Angular 从一开始就应该拥有所有源代码,因此您无需使用 requirejs 加载它。

      相反,我建议您将gruntconcat 插件一起使用。它将您的应用程序的各个部分组装在一起,并且每个应用程序都有一个文件。

      然后,当你为每个应用程序有一个文件时,你可以用 requirejs 加载它,它有意义,但不能加载模块。

      也可以看看angular code style,里面有很多正确写法的建议。

      UPD:关于您的问题:如果您有一组应用程序常用的模块(我的意思是您有很多),那么您可能有兴趣将require.js 与@987654327 一起使用@。在这种情况下,read and follow recommendations 来自本文。否则,你真的不需要require.js

      【讨论】:

      • 感谢您的回复。不幸的是,由于其他原因,我不得不使用 requirejs(该项目更复杂,它使用库,这只是其中的一小部分)。我正在使用 grunt-contrib-requirejs
      • @gabric 阅读上面的文章,它有几个我发现不明显的主要思想:requirejs 和 angularjs 有单独的注入管理器;如果你使用 requirejs,你应该使用手动引导 Angular。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 2013-09-30
      相关资源
      最近更新 更多