保持angularjs与应用程序分离

时间:2015-02-01 21:38:35

标签: javascript angularjs requirejs

我正在计划一个理想情况下我希望与Angular保持分离的应用程序,因此所有dom交互都将进入Angular层,但核心业务逻辑将保存在一个完全没有意识到的独立应用程序中角。两者将通过Angular服务进行通信,这些服务能够将消息发送到核心应用程序。

独立应用程序很可能会使用requirejs来处理依赖注入。

我不确定的是如何获得可能被声明的模块:

define('AppInteractor', ['require'], function(requre){
    // Set up interactor functionality
});

进入Angular服务。

我的第一个就是要有这样的适配器:

define(['AppInteractor', 'angular'], function(interactor, angular) {
    var app = angular.module('appInteractor', []).service('AppInteractor', interactor);
});

这会将AppInteractor注册为角度模块中的服务,这种方法的问题似乎是因为requirejs异步加载事物,当角度代码运行时尚未设置服务。它似乎最终会出现角加载两次,这可能也无济于事。

我已经看过一些文章,涵盖了通过require加载所有Angular组件,但我希望可能有更简单的方法来完成这项工作。

有人可以推荐我如何使这项工作?

1 个答案:

答案 0 :(得分:0)

如果您要在主模块初始化后添加服务,我建议您将其添加到您的应用程序模块

define(['AppInteractor', 'angular'], function(interactor, angular) {
  // There is no second parameter, because we are getting an existing
  // module, not creating a new one.
  var app = angular.module('appModule');
  app.service('AppInteractor', interactor);
});

否则,如果要将所有其他逻辑分组到不同的模块中,则需要导入模块并将其添加为应用程序模块的要求。

define(['AppInteractorModule', 'angular'], function(interactorModule, angular) {
  var app = angular.module('appModule', [interactorModule.name]);
});

我还建议您使用ES6(6to5,traceur),browserify或Typescript等工具进行模块管理,然后编译到AMD。我觉得开发更简单,更清洁。