我正在阅读关于Angular最佳做法的some documentation,并且我遇到了一个声明named functions for controllers are better than than anonymous的部分。
/* recommended */
// dashboard.js
angular
.module('app')
.controller('DashboardController', DashboardController);
function DashboardController() { }
但是,如果我想传递服务,这怎么可行呢?使用我以前使用的匿名语法只是
.controller('DashboardController', ['SomeService', function(SomeService){
SomeService.someFn();
}]);
如何通过传递函数来完成此操作,以便遵循最佳实践。
答案 0 :(得分:0)
您可以将用于内联表示法的数组存储在变量中。
var DashboardController = function(SomeService) { };
var dashboardControllerArray = ['SomeService', DashboardController];
angular
.module('app')
.controller('DashboardController', dashboardControllerArray);
但是,我个人觉得这不是必要的。您之前已经提供了控制器的名称,这与变量名称一样具有描述性。如果你打算重用一个控制器函数,你可以这样做,但如果你这样做,你也可以创建一个可重用的 AngularJS 控制器。
我也不会将您链接的文档称为“文档”。它本质上是一篇博客文章,作者出于某种原因决定在GitHub上主持,并且明确表示这是一篇评论文章。这不是错误(其中一些可能真的很有帮助),但你不需要把它当作一个建议。
答案 1 :(得分:0)
在Angular中有多种方法可以指定依赖项。例如,您可以使用相同的表示法,只传递命名函数而不是匿名函数:
angular
.module('app')
.controller('DashboardController', ['SomeService', DashboardController]);
function DashboardController (SomeService) { /* ... */ }
另一种方法是向控制器添加一个$inject
属性,其中包含所有控制器的依赖项。我喜欢这种方法,因为它可以保持模块注册的清洁(在注册控制器时不再需要指定依赖项):
angular
.module('app')
// SO FRESH AND SO CLEAN
.controller('DashboardController', DashboardController);
DashboardController.$inject = ['SomeService'];
function DashboardController (SomeService) { /* ... */ }