Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 注射厂的最佳做法是什么?_Angularjs - Fatal编程技术网

Angularjs 注射厂的最佳做法是什么?

Angularjs 注射厂的最佳做法是什么?,angularjs,Angularjs,我应该注射MyFactories3次吗?这样做的最佳实践是什么?您混淆了三个截然不同的东西: 模块:在其中注册各种组件(控制器、服务、指令、过滤器)。模块可以依赖于其他模块。在您的示例中,您定义了一个名为“password\u遗忘”的模块,它依赖于一个名为“MyFactories”的模块。您的应用程序是一个依赖于其他模块、依赖于其他模块等的模块。因此,应用程序是所有这些模块中注册的所有组件的联合。请注意,工厂不是角度组件。一个名为“MyFactories”的模块可能更应该被命名为“MyServ

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

您混淆了三个截然不同的东西:

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

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

main.$inject = ['auth'];

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

只有在缩小JS代码时才需要。如果您打算这样做,那么我建议您避免自己插入这样一行代码,并在缩小之前依靠ng annotate修改代码以使其可缩小。

好的,我更新我的代码,现在怎么样,对吗?是的,我计划缩小,如果我在我的根模块上插入app.auth如何?所以我不需要在密码上注入\你忘了,这是一种糟糕的方式?模块不被注入。这是不正确的术语。模块依赖于其他模块。这是正确的术语。您的新代码定义了一个模块“password\u遗忘”,该模块依赖于另一个模块“app.auth”,该模块未在发布的代码中定义。服务被注入。在您的代码中,“auth”服务是未知模块的一部分,它被注入控制器“main”中,并在模块“password\u”中注册。这是正确的代码,假设模块'app.auth'和服务'auth'是在某个地方定义的。但是正如我所说的,您应该使用ng annotate,而不是明确定义main。$inject。@jbnize您能详细说明为什么不建议手动注释吗?我的意思是,我们几乎在任何地方都有为我们做任何事情的工具,你不能责怪某人理解了他所做的事,也不要责怪任何人。我只是觉得手动注入会使代码变得过于冗长,可读性和可维护性较差,并且是bug的来源。我不喜欢虫子。我推荐我发现的最佳实践。
main.$inject = ['MyFactories', '$scope'];