在控制器中使用具有函数引用的服务
Use a service with function reference in controller
我正在阅读一些关于 Angular 最佳实践的文档,我遇到了一个部分,其中指出控制器的命名函数比匿名函数更好。
/* recommended */
// dashboard.js
angular
.module('app')
.controller('DashboardController', DashboardController);
function DashboardController() { }
但是,如果我想传入服务,这如何工作?使用我习惯的匿名语法,它只是
.controller('DashboardController', ['SomeService', function(SomeService){
SomeService.someFn();
}]);
如何通过传入函数来做到这一点,以便我可以遵循最佳实践。
有多种
方法可以在 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) { /* ... */ }
您可以将用于内联表示法的数组存储在变量中。
var DashboardController = function(SomeService) { };
var dashboardControllerArray = ['SomeService', DashboardController];
angular
.module('app')
.controller('DashboardController', dashboardControllerArray);
不过,我个人认为没有必要。您之前已经给出了控制器的名称,它与变量名称一样具有描述性。如果你打算重用控制器函数,你可以这样做,但如果你这样做,你也可以创建一个可重用的AngularJS控制器。
我也不会称您链接的来源为"文档"。它本质上是作者出于某种原因决定在 GitHub 上托管的博客文章,并且很明显它是一篇评论文章。这并没有错(其中一些可能真的很有帮助),但你不需要把它当作一个建议。
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- IIFE中的函数引用不可用
- Wordpress中的Javascript出现匿名函数/引用错误
- 将函数引用存储在散列中在javascript中无法正常工作
- Google可视化addListener调用函数引用错误
- 如何存储包含参数的JS函数引用
- 如何从函数引用元素(从事件侦听器调用)
- 将函数引用传递给嵌套闭包
- Javascript递归函数引用了这一点
- 在Node.js中,从同一文件中的另一个函数引用一个函数会导致'ReferenceError:-函数-未定义
- 为什么将函数引用封装到匿名函数中可以更正'这'指向
- 如何在ES6中使用Arrow函数引用对象内部的其他函数
- 复制不带属性的函数引用
- 在控制器中使用具有函数引用的服务
- Jquery 和闭包或函数引用不起作用
- 将函数引用传递给函数失败
- Jasmine spyOn:当传递间谍函数引用时如何使其工作
- 从 Javascript 中的嵌套函数引用对象成员
- Typescript-不同文件中的模块函数引用-“;找不到符号“;
- 与许多事件侦听器和函数引用一个对象相比,什么是更好的方法