Angular 角度及;在组件之间传递数据:解析保护与服务注入的用例

Angular 角度及;在组件之间传递数据:解析保护与服务注入的用例,angular,dependency-injection,angular-services,angular-router-guards,skeleton-ui,Angular,Dependency Injection,Angular Services,Angular Router Guards,Skeleton Ui,在Angular中,有多种方式将数据传递给组件,特别是,可以在创建组件之前使用Resolve guard加载数据,以使其始终可用,或者可以在组件的构造函数中注入服务并订阅其数据$流,然后在等待加载实际数据时不使用任何内容或默认值 我无法理解什么时候一种方法比另一种更可取或更适合使用,在线示例都是关于不向用户显示空界面的。但是开发者可以在加载数据时创建一个占位符界面(骨架/幻影),这实际上是一种更好的用户体验,那么这有什么意义呢?用户的UI不会被阻止 那么,当使用一种方法时,是否存在特定的用例或边

在Angular中,有多种方式将数据传递给组件,特别是,可以在创建组件之前使用Resolve guard加载数据,以使其始终可用,或者可以在组件的构造函数中注入服务并订阅其
数据$
流,然后在等待加载实际数据时不使用任何内容或默认值

我无法理解什么时候一种方法比另一种更可取或更适合使用,在线示例都是关于不向用户显示空界面的。但是开发者可以在加载数据时创建一个占位符界面(骨架/幻影),这实际上是一种更好的用户体验,那么这有什么意义呢?用户的UI不会被阻止


那么,当使用一种方法时,是否存在特定的用例或边缘用例?或者这仅仅是一个品味的问题,考虑到我的假设?我知道,从绝对意义上讲,没有比另一个更好的选择,我只想尽可能通过示例来理解。

将数据传递给它利用DI的组件的最佳方法。这是我个人的选择,但我将尝试在第一点中描述。这种方法适用于中大型应用程序

为什么?

  • 它的数据提供程序不可靠。您可以轻松地更改提供程序中的数据生成器或数据转换,并将该提供程序注入组件。当我们在组件内部使用
    route.snapshot
    并从中获取一些数据时,这种情况非常流行。这使您的组件路由可靠,如果您将此组件移动到应用程序的另一部分,它将无法工作。但是,当您将所有获取数据的逻辑放在提供者中时,它将使您的组件更加灵活。始终考虑“我是否可以轻松地在应用程序的另一部分重用我的组件”,然后您将了解“提供者想法”
  • 如果我们需要转移到另一个数据生产者,我们可以轻松地更改提供者,但这不会影响我们的组件
  • 我们的组件的代码行更少
  • 易于测试组件和提供程序
  • 如果你的应用程序从小到中都可以使用解析器和防护,但是尽量避免在你的演示组件中使用一些路由绑定(只是流行的情况)。使用解析器和防护的一个很好的例子是在组件内部分派操作,然后从存储中获取所有数据

    如果你的应用是中型到大型的,那么最好的方法就是利用私有DI提供商


    这个答案的灵感来源于。

    我的英语不好,但我已经试着解释了这种方法的优缺点。