Angular 2:在所有组件中使用的函数

2023-12-19

我有一个 Angular 2 webpack 项目,其中目前有一些在多个组件中重复的功能。我想从“主”类或组件(以有效者为准)继承所有这些组件,以便能够从所有需要它们的组件中调用我的函数。

举个例子,如果我在 3 个不同的组件中有一个函数 foo:

foo(s: string){
  console.log(s);
}

我希望您将此函数移至另一个文件/类/组件:

class parent{
  foo(s: string){
    console.log(s);
  }
}

并以某种方式从给定的组件调用我的 foo 函数。例如:

class child{
  constructor(){
    foo("Hello");
  }
}

我该如何使用 Angular 2 / Typescript 来做到这一点?


我会使用一项服务,这是我的一个应用程序的简短示例:

import {Injectable} from '@angular/core';
import * as _ from 'lodash';

@Injectable({
  providedIn: 'root' // Just do @Injectable() if you're not on Angular v6+
})

export class UtilsService {

  findObjectIndex(list: any[], obj: any, key: string): number {

    return _.findIndex(list, function(item) {
      return obj[key] === item[key];
    });
  }

  findObjectByQuery(list: any[], key: string, query: string): any {

    return _.find(list, function(item) {
      return item[key].toLowerCase() === query.toLowerCase();
    });
  }
}

然后你可以将此服务注入到任何东西中,这非常有用,并且可以让事情保持干燥。

你只需像这样注入它:

import {UtilsService} from 'app/shared';

export MyComponent {

  constructor(private utils: UtilsService) {
    utils.findObjectIndex([], {}, 'id'); // just an example usage
  }
}

EDIT:

正如 @aalielfeky 的回答所说,你可以使用静态函数。

然而,我个人会避免使用静态函数,因为它们几乎不可能正确测试,并且一旦需要在构造函数中注入将在其中一个函数中使用的东西时,就会给你带来麻烦。由于静态函数不能使用注入的任何内容。

不要犯和我一样的错误,因为你最终将不得不重写很多代码。

EDIT 2:您还可以使用另一种方法,即仅具有普通功能。如果您的函数不需要依赖项注入(对于简单的辅助函数来说通常是这种情况),那么这可能是一个好主意。只需创建一个文件,例如helpers.ts(或者如果您有许多函数,则每个函数一个文件)并执行以下操作:

export function sum(a: number, b: number) {
  return a + b;
}

或替代语法:

export sum(a: number, b: number) => {
  return a + b;
}

现在,您可以简单地使用以下任一导入语句导入它(取决于您是否将所有函数放在一个文件中或每个函数一个文件中):

import { sum } from 'helpers';
import { sum } from 'helpers/sum';

这种方法的一个好处是,它很容易进行树摇动,并且与使用服务相比,单元测试也变得稍微容易一些,因为您不需要在测试中添加额外的代码以使服务正常工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2:在所有组件中使用的函数 的相关文章

随机推荐

  • 在android中读取EditText的文本

    我正在编写一个简单的 Android 应用程序 它有一个编辑文本和一个按钮 单击按钮应显示一个警报对话框 其中包含在编辑文本中输入的文本 为此 我有以下代码 String txt Called when the activity is fi
  • EMGU QueryFrame 通过 RTSP 返回“条纹”图像

    我有一个高清网络摄像机 我试图通过 rtsp 抓取帧并使用以下代码 in Form Load Application Idle getNextFrame 和事件处理程序 private void getNextFrame object se
  • 如何删除google colab本地上传的文件?

    我正在尝试使用以下代码删除我在 Google colab 上上传的文件 from google colab import files uploaded files upload 现在如何删除该文件 例如 如果文件的名称是 sample jp
  • WorksheetFunction.Transpose 更改数据类型

    我正在使用WorksheetFunction Transpose在 VBA 中将混合日期 字符串的一维数组转换为二维数组以写入工作表 我的 Windows 区域设置设置为DMY 写回的日期有月 日切换 这个论坛里已经提到过Dates正在转换
  • 如何实现一个非常简单的文件系统?

    我想知道操作系统如何读取 写入硬盘 我想作为练习来实现一个简单的文件系统 没有可以读写文件的目录 我从哪说起呢 C C 可以解决这个问题还是我必须采用更底层的方法 一个人处理的事情是否太多了 看看保险丝 http fuse sourcefo
  • Objective-c 多播委托

    我在 xcode 中创建新的选项卡式视图项目 在 appdelegate 中我创建了一个协议 h file protocol myProtocol
  • 在 Java 中从 json 文件中删除 json 对象

    我有一个在线下载的 json 文件 price 1 empty 0 0 0 0 0 lowValue 0 highValue 0 我想删除其中的所有内容 空的 to 我花了几个小时研究正则表达式的东西 但我似乎不知道如何让它做我想做的事情
  • 在两个数组中查找唯一元素索引的 Pythonic 方法

    我有两个类似于这些的已排序的 numpy 数组 x np array 1 2 8 11 15 y np array 1 8 15 17 20 21 元素在同一个数组中永远不会重复 我想找出一个办法蟒蛇找出包含数组中存在相同元素的位置的索引列
  • Appcelerator Titanium:代码签名错误:未找到代码签名身份

    这让我发疯 我现在花了大约 10 个小时删除和重新生成我的 Appcelerator Titanium iPad 应用程序的 Apple 密钥和配置文件 一年前我已经完成了所有工作和编译 然后我的 Mac 崩溃了 我不得不重新格式化并重新开
  • “jmeter”不被识别为内部或外部命令、可操作程序或批处理文件

    当我在命令行模式下运行 JMeter 脚本时 出现以下错误 但相同的脚本在 GUI 模式下运行得非常好 这里需要一些帮助来解决这个问题 下面是错误 C Users Sundarapandiyan gt jmeter n t D JMETER
  • 将列表中找到的 ID 添加到 pandas 数据框中的新列

    假设我有以下数据框 一列整数和一列包含整数列表 ID Found IDs 0 12345 15443 15533 3433 1 15533 2234 16608 12002 7654 2 6789 43322 876544 36789 还有
  • 如何在 Ruby on Rails 中解析翻译后的日期?

    我已经在 Ruby on Rails 中配置了一个应用程序 并将其翻译为西班牙语 现在我需要解析翻译后的日期 例如 Jueves 2012 年 11 月 22 日 我正在尝试这样做 Date strptime Jueves 22 de No
  • python:来自多个字典的联合键?

    我有 5 个字典 我想要它们的键的并集 alldict dict1 dict2 dict3 dict4 dict5 I tried allkey reduce lambda x y set x keys union y keys alldi
  • 如何在没有 foreach 的情况下使用 PHP 生成器?

    这是一个简单的 JavaScript 生成器 通过 http blog carbon Five com 2013 12 01 hanging up on callbacks generators in ecmascript 6 http b
  • 使用 $in 查询更新 mongodb?

    我有三个数组 coupon ids id counter 和increase ctr 现在 任何索引处的 coupon id 值都出现在 id counter 和increase ctr 中的同一索引处 因此 对于 coupon id 58
  • 拖放 Datagridview Winform C# 的行

    我想将行从同一网格视图中的某个位置拖动到另一个位置 其他行应根据拖放自动调整 谢谢 在应用程序中进行拖放操作时 我更喜欢使用鼠标事件而不是实际的拖放事件 1 未绑定示例 这是一个简单的示例 使用鼠标事件在显示行时拖动行Cell值在一个Lab
  • 扩展 Doctrine Entity 以添加业务逻辑

    我正在尝试实践良好的设计并扩展 Doctrine 实体 我的扩展类 基本上是模型 将具有额外的业务逻辑 对实体基本数据的访问 我正在使用 Doctrine 2 2 1 和 Zend Framework 1 11 4 和 php 5 3 8
  • Google Sheet 脚本显然没有返回数字

    我正在用 Google Script 编写我的第一个自定义函数 一切都在调试中运行良好 我的代码运行 显然 完美 已经写了一个函数 CONVERT RACETIME TO SECONDS 它接受特定格式的字符串 然后返回秒数 然后 该函数应
  • 如何快速了解 SQLite 中的表结构?

    是否有类似 显示 TABLENAME 中的列 之类的命令 我只知道 dump 命令 但在这种情况下这真的很愚蠢 它还会输出所有数据 我需要一些东西来查看表结构 你需要使用一个PRAGMA http www sqlite org pragma
  • Angular 2:在所有组件中使用的函数

    我有一个 Angular 2 webpack 项目 其中目前有一些在多个组件中重复的功能 我想从 主 类或组件 以有效者为准 继承所有这些组件 以便能够从所有需要它们的组件中调用我的函数 举个例子 如果我在 3 个不同的组件中有一个函数 f