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

fun*_*fly 9 angularjs

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

我创建单页应用程序.让我们假装它包含一个标签模块,一个文件上传模块和一个文件列表模块.

我在Backbone中要做的是,我将每个模块拆分为独立模块,使用自己的视图模板,viewcontroller等.这样,我就可以在我的应用程序中使用该模块的几个位置.模块除了自身以外不了解任何其他内容.

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

我觉得他们告诉如何在他们的文档中创建模块中的许多控制器.但这听起来并不像我需要的那样.或者我在这里误解了一些主要概念?

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

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

luc*_*uma 3

您绝对可以定义模块,并将模块包含在应用程序级别,然后通过依赖项注入,您允许控制器使用它们所需的内容。

我有一个我正在开发的用于学习 Angular 的小型应用程序的概念证明示例(它非常脏,而且是我的游乐场):

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

我的应用程序定义如下所示:

angular.module('myApp', ['ngResource','ui.bootstrap', 'myApp.services', 'myApp.servicesMovie', 'myApp.servicesSearch', 'myApp.servicesUtils', 'myApp.servicesMovieList'])
Run Code Online (Sandbox Code Playgroud)

您可以看到我在我的应用程序中包含了一堆不同的模块,然后是一个从服务模块获取一些服务的控制器示例:

function SearchCtrl($scope,  $rootScope, $route, $timeout, $routeParams, $location, SearchService, MovieListService) { etc }
Run Code Online (Sandbox Code Playgroud)

这是模块的定义之一(也及其依赖项):

angular.module('myApp.servicesMovieList', ['myApp.services'])
Run Code Online (Sandbox Code Playgroud)

关于模板,您可以定义它们并将它们包含在您的路由值中:

$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'});

  }])
Run Code Online (Sandbox Code Playgroud)

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