【问题标题】:Angular 4: How to create reusable module of base classesAngular 4:如何创建基类的可重用模块
【发布时间】:2017-12-06 16:56:37
【问题描述】:

我有一些抽象/基类,它们被其他应用程序中的其他模块继承。这些不是服务,也不是组件——只是包含一些由不同组件使用的通用特性——并且这些组件将在几个不同的项目中使用。 例如,我有一个基本输入类,它由字母数字输入类继承,然后由字母和字母数字输入组件继承,该组件具有自己的单独模块和 npm 包,可以在未来的项目中使用。

我的计划是创建一个基模块:组件模块可以导入和扩展的基类集合,但如果没有 @Component/@Pipe/@Directive 或 @Injectable 装饰器,我无法声明或提供普通类。

如果我用@Injectable 装饰每个基类,代码似乎可以编译 - 但这些不是服务,只是以后要继承的代码,所以我不知道这是否是正确/可接受的方法。

用一个通用的类集合来定义一个这样的基础模块,以便在其他几个独立的组件中使用,最好的方法是什么? 理想情况下,每个这样的组件都应该有自己的模块和 npm 包,并依赖于基类集合包。

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    根据我在 Angular 中使用 extend 关键字的经验,这是一个非常糟糕的主意,因为它违背了框架试图表示的概念,并且可以被视为反模式。您基本上是在尝试避免使用 Dependency Injection,这是该框架的关键部分。

    您真正想做的是创建自己的模块,其中包含PipesComponentsInjectables(也称为Services)。

    如果您想向其中一个组件/服务/管道等添加功能,您应该创建一个将被注入的服务,从而使测试和维护变得更容易。

    例如每当我使用momentjs 时,我都会先创建一个包含库功能的服务。

    【讨论】:

    • 在这种情况下,我正在尝试使用组件创建单独的模块,其中每个组件共享一些应该从基类继承的基本代码/功能。我想避免在每个组件模块中重复相同的代码,这似乎是一种非常糟糕的做法——可能比以角度扩展更糟糕。编辑:我可以为每个基类使用 Injectable() ,只是不确定是否会有任何不良后果 - 因为这些不是真正的服务或工厂。
    • 一般来说,你应该在服务中包含更重的逻辑,并让组件与它们通信。这就是依赖注入存在的原因。提供更清晰的上下文将有助于我为您提供有关如何设计解决方案的更多建议。
    • 我正在实现基本的控件、服务和包装器,用于我们将来开发的所有 angular4 项目。
    • 问题是实现拥有不是组件或服务的祖先类的最佳方式是什么,只包含否则每个类都必须包含冗余的代码。这些基类还包含方法、属性和输入绑定。
    • 例如。我有一个由字母数字控件类继承的基本输入类,然后由一些以特殊方式处理数字的实际组件继承。在实际项目中只使用继承树中最底层的后代,祖先只是以有组织的方式包含公共代码。
    猜你喜欢
    • 2016-09-12
    • 2023-03-23
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多