tl; dr:为什么不通过组件之间的引用传递变量,以使它们在相同数据上起作用,而不是使用例如行为主体?
我正在Angular 8中编写一种日记应用程序。我有两个组件(导航栏和仪表板)和一个服务(EntryService)。
导航栏列出条目,仪表板提供文本区域,EntryService将它们粘合在一起并与数据库通信。
在调试应用程序时,我偶然发现了一种在服务和以前没有想到的组件之间进行通信的方法。
偶然地,我从仪表板通过引用向EntryService传递了一个变量(条目:Entry)。保存到数据库的服务将获得唯一的ID,并将此ID保存到输入变量中。由于“通过引用传递”,该更改立即反映在仪表板上。
直到现在,我一直在使用Subjects更新更改中的组件,但是传递引用似乎更加简单,因为我想在组件和服务上处理相同的数据。
我已经学习了Angular一段时间,但没有阅读有关这种方法的信息,所以我想知道这是一个坏主意还是设计,是的,为什么?
感谢您的回答!
答案 0 :(得分:0)
通过引用可以很方便。但是,作为使应用程序组件保持同步的一般方法,它有一些缺点。使用主题,您可以通过检查在哪里调用Subject.next()函数来轻松地研究应用程序的值将在哪个位置更改。当您通过引用一百个组件/服务来传递对象时,将很难发现它们中的哪一个修改了对象,更重要的是何时,因为您通常希望随后触发其他更改。订阅主题时,您会收到有关更改的通知,并可以对它们做出反应。主题和订阅者是“观察者/可观察”模式的示例,它使您可以分离应用程序逻辑。而且它们更加灵活,例如,您可以拥有一个主题,该主题可以返回最近的x项更改,或者您可以在跟踪用户输入时将更改退信,可以对其应用过滤器等。