angularjs - 如何将大型 AngularJS 项目拆分为模块

标签 angularjs

我来自 Backbone 和 JavascriptMVC 的世界。但我真的很想切换到 AngularJS。到目前为止,我有一个大问题让我无法转换。

我创建单页应用程序。让我们假设它包含一个选项卡模块、一个文件上传模块和一个文件列表模块。

我在 Backbone 中要做的是将这些中的每一个拆分为独立模块
有自己的 View 模板、 View Controller 等。这样,我就可以在我的应用程序中的多个地方使用该模块。这些模块不知道除了它自己之外的任何东西。

在 AngularJS 中如何处理这个问题?是否可以为每个模块创建一个 angular.module(例如选项卡模块)?

我觉得他们在他们的文档中告诉了如何在一个模块中创建许多 Controller 。但这听起来不像我需要的。还是我在这里误解了一些主要概念?

编辑:
我做了更多的研究。看起来指令是我正在寻找的。而 AngularJS 中的模块代表整个 Web 应用程序。因此,“组件”和“模块”名称的混合让我感到困惑。

我现在走在正确的道路上吗?

最佳答案

您绝对可以定义模块并在应用程序级别包含您的模块,然后通过依赖注入(inject)您允许您的 Controller 使用他们需要的东西。

我有一个用于学习 Angular 的小型应用程序的概念证明示例(它很脏,我的操场):

http://plnkr.co/edit/1jGqaB00OznAUpyPZVT3

我的应用定义如下所示:

angular.module('myApp', ['ngResource','ui.bootstrap', 'myApp.services', 'myApp.servicesMovie', 'myApp.servicesSearch', 'myApp.servicesUtils', 'myApp.servicesMovieList'])

你可以看到我在我的应用程序中包含了一堆不同的模块,然后是一个从服务模块获取一些服务的 Controller 示例:
function SearchCtrl($scope,  $rootScope, $route, $timeout, $routeParams, $location, SearchService, MovieListService) { etc }

这是模块的定义之一(也有它的依赖项):
angular.module('myApp.servicesMovieList', ['myApp.services'])

关于模板,您可以定义它们并将它们包含在您的路由值中:
$routeProvider.when('/view1', {templateUrl: 'view1.html', controller: ViewCtrl});
    $routeProvider.when('/movie/:id', {templateUrl: 'movie-detail.html', controller: MovieCtrl, resolve: MovieCtrl.resolve});
    $routeProvider.when('/search/:q/:p', {templateUrl: 'movie-search.html', controller: SearchCtrl});
    $routeProvider.when('/searchlist/:url/:p', {templateUrl: 'movie-search.html', controller: SearchCtrl});
    $routeProvider.otherwise({redirectTo: '/view1'});

  }])

或者你当然可以用 ng-include 给他们打电话

关于angularjs - 如何将大型 AngularJS 项目拆分为模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16509298/

相关文章:

angularjs - Angular ui-select 错误 : 404 (Failed to load template)

javascript - 子组件未获取其父组件的触发事件

angularjs - 如何通过 $http 将 angular-ui 的 typeahead 与服务器绑定(bind)以进行服务器端优化?

firefox - Angular xhr 请求在 Firefox 中导致重定向警告

angularjs - $rootScope 更改不会反射(reflect)在模板上

javascript - Angular 模块不可用 Karma Jasmine

javascript - 将指令转换为 typescript 中的组件

angularjs - Atom-shell + AngularJS - 如何打开文件保存对话框?

javascript - Angular 加载和 $digest

javascript - AngularJS 中的纯功能 Controller