我来自 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/