注入工厂的最佳做法是什么?

时间:2015-09-07 15:32:46

标签: angularjs

angular
   .module('password_forgot', ['app.auth'])
   .controller('password_forgot', main);

main.$inject = ['auth'];

function main(auth) {
   auth.sendEmail().then(function(){
     //blablabla
   });
}

我应该注射MyFactories 3次吗?这样做的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

你混淆了三件非常不同的东西:

  • 模块:这是注册各种组件(控制器,服务,指令,过滤器)的地方。模块可以依赖于其他模块。在您的示例中,您将定义一个名为“password_forgot”的模块,该模块依赖于名为“MyFactories”的模块。您的应用程序是依赖于其他模块的模块,依赖于其他模块等。因此,应用程序是所有这些模块中注册的所有组件的并集。请注意,工厂不是角度组件。名为“MyFactories”的模块应该更名为“MyServices”。
  • 服务:这是一个角度组件,可以注入其他角度组件。在您的示例中,您将名为“MyFactories”的服务注入控制器“main”。使用与命名模块相同的方式命名服务是非常不寻常的,也可能是错误的。你不应该这样做。 “MyFactories”这个名字对于一项服务来说是一个非常糟糕的名字。服务应该具有特定的责任,例如“翻译”或“身份验证”或“产品”
  • 工厂:工厂是在给定名称下注册到模块的功能(例如,“身份验证”),其职责是创建并返回该名称服务的唯一实例(' “)。此函数由angular调用一次,返回的对象或函数是注入其他组件的服务。

该行

main.$inject = ['MyFactories', '$scope'];
只有在缩小JS代码时才需要

。如果您打算这样做,那么我建议您避免自己插入这样一行代码,并在缩小之前依赖ng-annotate来修改代码以使其可以进行修改。