Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.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
Javascript 角度-多用途组件是否完全自行创建?_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 角度-多用途组件是否完全自行创建?

Javascript 角度-多用途组件是否完全自行创建?,javascript,angular,typescript,Javascript,Angular,Typescript,我有一个关于角度分量的小问题 我经常读到,您应该只使用组件来显示数据和与用户交互,对于您的“业务逻辑”,您应该更喜欢服务 所以我的问题如下(只是一个例子): 比如说,我制作了一个通过拖放上传文件的组件。我有逻辑从拖放中获取数据,并将其存储在组件typescript文件中的数组中(可能还有更多其他函数) 现在,当我在一个父组件中包含此组件两次时(因为我需要两个上载字段),这两个都引用了相同的内容,还是该组件中的程序逻辑也为每个实例创建了两次 如果是这样的话,那么我应该尽量在单例服务中保留尽可能多的

我有一个关于角度分量的小问题

我经常读到,您应该只使用组件来显示数据和与用户交互,对于您的“业务逻辑”,您应该更喜欢服务

所以我的问题如下(只是一个例子):

比如说,我制作了一个通过拖放上传文件的组件。我有逻辑从拖放中获取数据,并将其存储在组件typescript文件中的数组中(可能还有更多其他函数)

现在,当我在一个父组件中包含此组件两次时(因为我需要两个上载字段),这两个都引用了相同的内容,还是该组件中的程序逻辑也为每个实例创建了两次

如果是这样的话,那么我应该尽量在单例服务中保留尽可能多的共享程序逻辑,这样它们在运行时只创建一次,而不会浪费内存等等,不是吗

希望有人明白我的意思:)


提前谢谢

如果在模板中创建两个相似的组件,例如:

<app cumstom></app custom>
<app cumstom></app custom>

这将导致创建两个对象,它们都有自己的模型(数据)和视图。他们彼此一无所知


如果您希望他们进行通信,那么使用一个可以注入两个组件的服务通常是明智的,这样他们就可以共享相同的数据。如果在您的
ngmodule
中提供了服务,则只会创建一次(因此它是一个单实例)。

如果将组件添加到父组件中两次,则会创建两个不同的实例(每个实例都拥有唯一的作用域)


但是,您应该将上传/处理逻辑抽象到服务中。在模块中提供该服务,使其成为单例。如果您希望每个组件都有一个实例,那么就在组件内部提供它。

我认为您需要的是一个智能组件,您可以将您的两个上载组件放在这个智能组件中,并将您的服务逻辑注入到这个智能组件中。智能组件将负责在两个组件之间提供公共逻辑的桥梁。

因此,如果我正确理解这一点:当同一组件添加两次时,则每个组件将存在两次(模型中的所有函数、字段、属性)?因此,最好将所有组件之间共享的逻辑(如读取删除的文件并验证它们(正确的文件类型等))包含到一个单例服务中,这样它只存在一次?@Sazeidia,是的,所有方法、属性和模型都将存在两次。就像你用“new”两次调用构造函数一样。将您的单例作为单一逻辑源(易于调试!)。感谢您的时间。它帮助我更好地理解了这一点:)@Sazeidia,我的荣幸:)。此外,您可以将服务想象为“原型”。单一发生(除非按组件注入),存储可重用和通用方法。