Angular 2+:给定一个组件实例,告诉注入了哪些属性。
创始人
2024-10-15 16:00:37
0

要确定一个Angular组件实例注入了哪些属性,可以使用ReflectiveInjectorComponentFactoryResolver来检查组件的依赖关系。

以下是一个示例代码,演示了如何获取给定组件实例的注入的属性:

import { ReflectiveInjector, ComponentFactoryResolver } from '@angular/core';

function getInjectedProperties(componentInstance: any): string[] {
  // 获取组件的工厂解析器
  const componentFactoryResolver = ReflectiveInjector.resolveAndCreate([
    ComponentFactoryResolver
  ]).get(ComponentFactoryResolver);

  // 获取组件的类型
  const componentType = componentInstance.constructor;

  // 使用工厂解析器获取组件的工厂
  const componentFactory = componentFactoryResolver.resolveComponentFactory(componentType);

  // 获取组件的依赖注入器
  const injector = ReflectiveInjector.fromResolvedProviders([], componentFactory.parentInjector);

  // 使用依赖注入器创建组件实例
  const instance = injector.get(componentType);

  // 获取组件实例的所有属性
  const properties = Object.getOwnPropertyNames(instance);

  // 过滤掉原型链上的属性
  return properties.filter(property => !Object.prototype.hasOwnProperty.call(componentType.prototype, property));
}

// 示例组件
@Component({
  selector: 'app-example',
  template: '
' }) class ExampleComponent { constructor(private someService: SomeService, private anotherService: AnotherService) {} } // 使用示例 const exampleComponentInstance = new ExampleComponent(new SomeService(), new AnotherService()); const injectedProperties = getInjectedProperties(exampleComponentInstance); console.log(injectedProperties); // 输出 ['someService', 'anotherService']

在上面的代码中,我们首先创建了一个ReflectiveInjector,并注入了ComponentFactoryResolver。然后,我们使用ComponentFactoryResolver来获取给定组件实例的工厂。接下来,我们使用工厂的父注入器创建一个新的注入器,并使用它来创建一个新的组件实例。最后,我们获取新组件实例的所有属性,并过滤掉原型链上的属性,返回注入的属性列表。

请注意,这种方法只能获取组件实例中使用@Injectable装饰器注入的属性。对于通过其他方式注入的属性(例如使用@Input@ViewChild装饰器注入的属性),这种方法将无法检测到。

相关内容

热门资讯

一分钟带你了解!aapoker... 一分钟带你了解!aapoker怎么拿好牌,aapoker辅助插件工具,线上教程(有挂透明)准备好在a...
我来分享!hhpoker可以控... 我来分享!hhpoker可以控制牌吗,德州局透视,辅助教程(有挂透视);大神普及一款德州ai内幕,确...
科技揭秘!约局吧app有挂吗,... 科技揭秘!约局吧app有挂吗,wepoker透视脚本网页,总结教程(有挂技巧);小薇(透视辅助)致您...
一起来讨论!hhpoker是正... 1、一起来讨论!hhpoker是正品吗,大菠萝免费辅助,wpk教程(有挂神器)。2、大菠萝免费辅助透...
推荐十款!aapoker发牌逻... 您好,佛手大菠萝有挂吗这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在...
玩家必看科普!wepoker买... 自定义wepoker买钻石有用吗系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅...
热点讨论!wepoker透视是... 热点讨论!wepoker透视是真的吗,wepoker手机版辅助,教你教程(有挂透视)1、点击下载安装...
我来教大家!wejoker黑侠... 我来教大家!wejoker黑侠辅助器,wepoker透视脚本免费使用视频,必赢方法(有挂透视);致您...
分享实测!菠萝辅助器免费版的特... 分享实测!菠萝辅助器免费版的特点,we-poker辅助软件教程,靠谱教程(有挂透视);原来确实真的有...
一分钟了解!德州透视是真的吗,... 1、一分钟了解!德州透视是真的吗,德普之星辅助工具如何设置,安装教程(有挂透视)2、进入游戏-大厅左...