我是新来的打字稿,角度2和一个问题,我无法让我的思想围绕是。我认为服务是一个文件或文件,这些文件或文件具有对许多组件都有用和常用的功能。所以最终使这些功能成为中心,并因此在所有这些组件中使用。角度服务注入和导入对象之间的差异
所以我的问题是什么是这些服务,他们必须注入时,我可以创建一个功能的对象文字,只是在组件中导入它们。我仍然可以使用我导入的对象调用这些功能。
我是新来的打字稿,角度2和一个问题,我无法让我的思想围绕是。我认为服务是一个文件或文件,这些文件或文件具有对许多组件都有用和常用的功能。所以最终使这些功能成为中心,并因此在所有这些组件中使用。角度服务注入和导入对象之间的差异
所以我的问题是什么是这些服务,他们必须注入时,我可以创建一个功能的对象文字,只是在组件中导入它们。我仍然可以使用我导入的对象调用这些功能。
放弃一个类的类型,只是使用它是完全有效的。然而,在角依赖注入机制,让你实现同样的事情,但也有一些额外的好处:
要重申评论所说的话,服务的单个实例旨在跨多个组件/类使用。这是依赖注入完成的。例如,如果在多个组件使用的服务中有待完成的项目数组,则此列表在所有组件中都是相同的,因此如果一个组件添加到列表中,则所有其他组件都会看到此更改反映出来。
另一方面,导入对象文本会为每个组件使用不同的实例。因此,在同一示例中,如果服务对象包含待办事项项目的数组,则每个导入此对象的组件都将具有单独的待办事项列表,这些项目之间不会有任何关联。
希望能够澄清问题。
我不同意你在第一段中的陈述。这取决于你如何注入服务。你描述了共享服务的情况,这是同一个实例。但是你可以在许多情况下注入数组,以便共享数组 – Vega
它与应用程序组合有关,使用模块vs使用类+ DI令牌,但都提供了平分共享状态的能力。 –
服务是单身,对象不是。如果某个组件更改了某个服务的某个属性的值,则其他组件可以看到该值发生了更改,而如果某个组件更改了该对象的某个属性的值,则只能看到该更改。 – Claies
注入器允许重新实例化,替换或修改服务实例,而不更改定义或使用它们的文件,包括测试。这是不可能的进口,至少没有黑客。这是任何DI容器的特点,并不是Angular特有的。 – estus
谢谢你们,我想所有的答案都让事情更加清晰:) – Jdsans