我知道这个问题已经提出并给出了答案。但是我通过实际的例子学习得最好,并且遇到了一些我不完全理解的代码。
我指的是Angular Strap,它是一组用于酷用户交互的出色指令:http : //mgcrea.github.io/angular-strap/
我正在查看工具提示功能的代码,发现作者正在使用提供程序来公开功能。他还能使用服务或工厂来完成相同的工作吗?还是需要提供者?
这是代码的链接:https : //github.com/mgcrea/angular-strap/blob/master/src/tooltip/tooltip.js#L28
谢谢
简短答案:作者选择提供程序将默认值设置为“只读”。如果他们未使用Provider,则该代码仍然可以使用,但是Provider更干净,更“安全”
Provider
,Service
和Factory
在Angular中都是相同的基本东西,只是使用了不同的API;Provider
可以有点被认为是“基础”元件,但它们都具有相同的最终目的:创建一个角可注射的。这些注射剂都有一个提供者,提供者提供了蓝图(Angular查找$get
方法),以及提供者生成的Singleton实例。如果您使用Factory
或Service
,则Angular确实会在幕后工作,因此您无需了解所有细节。您只会觉得非常无聊Provider
,只做基础操作。但是,如果您使用Provider
自己,则可以在声明中添加额外的属性和函数。
您可以注入Providers
模块的config()
方法,该方法在创建任何Singleton之前运行。尝试在此处查找更详细的说明。
在AngularStrap中,作者在提供程序上放置了一个“默认”对象。作者希望您在模块的config()
方法中修改该对象,然后Angular会生成Singleton。但是,“默认值”对象不在Singleton上,因此一旦应用程序“运行”后就无法更改默认值。即使您在Provider
某个地方再次注入并再次更改了“默认值”,Angular也不会重新制作您的Singleton,因此默认值实际上变为“只读”。这是防止代码进行不必要的更改的好习惯,尤其是当您在同一代码中有多个人,或者您知道其他人将使用您的模块时。
您可能会看到其他无法正常工作的代码...也许另一个应用程序仅使用factory
,并将“默认值”对象放在该工厂上。它仍然可以“工作”,并且代码看起来很像当前。但是,由于“默认值”将直接放在Singleton上,因此,如果有人编写代码来执行此操作,则您的代码可以随时更改这些设置。现在,您需要留下注释和文档,说明何时更改默认值,何时不更改默认值等等。在99%的情况下,应用程序运行后就无需更改默认值,因此使用Provider
和module.config()
安全且直接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句