如何在文件中分离角度模块并需要使用Browserify?

时间:2015-12-10 16:40:45

标签: javascript angularjs node.js

我正在使用Angular进行前端使用,我正在尝试将每个模块的应用程序分开。

对于组织,我希望每个文件单独一个模块,所有控制器都是文件结构示例:

- module1 (paste)
    - controllers (paste)
        - controller1.js
        - controller2.js
    - module.js

module1.js需要controller1.jscontroller2.js,主javascript文件需要所有模块文件。

对于控制器,我module.exports只有控制器的内容,例如:

// controller1.js
module.exports = ["$scope", function(scope) {
  // some code here
}];

在我的模块文件中,我这样要求:

//module1.js
var app = angular.module("module1", []);

app.service("service1", function() {});

app.controller("controller1", require("./controllers/controller1.js");
module.exports = app;

直到这一刻,是好的。

但是当我尝试使用module1.jsmodule2.js使用service1时,这是返回service1未定义。

//module2.js
require('../module1/module.js');

var app = angular.module("module2", ['module1']);
app.controller('controller2-1', ["$scope", "service1", function(scope, service1) {
    // some code
});

每个文件分隔模块的正确方法是什么,需要Browserify

1 个答案:

答案 0 :(得分:1)

试试这个:

//child module
var angular = require('angular');
var moduleName = 'moduleChild';
var moduleDependencies = [...];

app.module(moduleName, moduleDependencies)
   .controller('foobarctrl', [function(){}]);

module.exports = moduleName;

//parent module
var angular = require('angular');
var moduleChild = require('/path/to/file');
var moduleName = 'moduleChild';
var moduleDependencies = [moduleChild];

app.module(moduleName, moduleDependencies)
   .controller('foobarbazctrl', [function(){}]);

module.exports = moduleName;

这种方式是使用browserify最清晰的方式之一,导出module1对象是没有用的,因为你不想重复使用它,你只需要那里的名字。