在angularjs中访问服务或工厂内部的范围是否正确



免责声明:我知道有些问题建议不要访问服务或工厂内部的范围,但在这里,我预计会对编码指南产生影响/如果不可取,是否可取,那么我需要适当的理由。

我们有angular js项目,这个项目很旧。现在,在重构之后,我的一位同事将通用实现从指令转移到了服务。在这样做的同时,为了访问指令的范围,他手动开始执行以下操作:

angular.element('<test-dir></test-dir>').scope();

我觉得这不是写服务/工厂的正确方式。我觉得我们正在使事情变得复杂,并建议删除上面的代码部分。为了证明这一点,我告诉:1.这将使单元可测试性变得复杂,现在我们正试图用测试指令的方式来测试服务。2.我们正在使这项服务与指令紧密结合。3.服务并不意味着访问范围。

但我认为我无法说服他,因为我没有太多的理由来证明这一点。请有人建议我的理解是否正确,并给出适当的理由来说服他。谢谢

否,服务/工厂应该使用数据,并且应该具有处理提供给它们的数据的逻辑。它们最好不应该引用DOM对象或范围变量。

我个人认为,将$scope传递给服务是个坏主意,因为它会创建一种循环引用:控制器取决于服务,服务取决于控制器的作用域

除了在关系方面令人困惑之外,像这样的事情最终会妨碍垃圾收集器。

服务只是应用程序业务层的一个功能。它充当一个构造函数,在运行时使用new调用一次,就像使用普通JavaScript一样(Angular只是在后台为我们调用一个新实例(。当您只想创建充当公共API的东西时,请使用service

服务类应该处理控制器提供的数据,如果需要,可以在任何其他地方重用同时保持作用域远离它,保持代码精简和干净,从而提高可维护性

我更喜欢将域对象放在控制器作用域中,并将其传递给服务。这样,无论服务在控制器内部使用,或者将来可能在另一个服务内部使用,它都可以工作

最新更新