加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular:如何通过控制台获得组件依赖性?

发布时间:2020-12-17 10:24:32 所属栏目:安全 来源:网络整理
导读:我将重点放在开发工具中的组件元素上,可以执行以下操作: ng.probe($0) 获取特殊对象“DebugElement”.现在我们可以得到它的注射器: ng.probe($0).injector 现在我想得到一个在这个组件上定义的依赖.依赖性被定义为类,所以我应该这样做: ng.probe($0).inje
我将重点放在开发工具中的组件元素上,可以执行以下操作:
ng.probe($0)

获取特殊对象“DebugElement”.现在我们可以得到它的注射器:

ng.probe($0).injector

现在我想得到一个在这个组件上定义的依赖.依赖性被定义为类,所以我应该这样做:

ng.probe($0).injector.get(MyService)

但!服务器未在控制台范围中定义.
如果我把它变成一个字符串:

ng.probe($0).injector.get('MyService')

显然它也行不通.

我想在ReflectiveInjector.get上进行逆向工程,但现在没有运气.有任何想法吗?

我们必须在声明时将token传递给injector.get方法.如果我们将类声明为标记,我们就不能使用字符串.

Angular将提供者在组件中声明为ngfactory Plunker

function View_App_Host_0(_l) {
  return jit_viewDef0(0,[(_l()(),jit_elementDef1(0,null,2,'my-app',[],jit_View_App_02,jit__object_Object_3)),jit_providerDef4(4608,jit_MyService5,[]),jit_directiveDef6(49152,jit_App7,null)],null);
}

它使用elementInjector来获得依赖.

DebugElement获取有关提供给当前节点的标记的信息

get providerTokens(): any[] {
  const tokens: any[] = [];
  if (this.elDef) {
    for (let i = this.elDef.index + 1; i <= this.elDef.index + this.elDef.childCount; i++) {
      const childDef = this.elView.def.nodes[i];
      if (childDef.flags & NodeFlags.CatProvider) {
        tokens.push(childDef.provider !.token);
      }
      i += childDef.childCount;
    }
  }
  return tokens;
}

在我们在提供者组件元数据数组中声明提供者之后,该令牌在providerTokens数组中可用.

所以我们可以通过写作获得依赖

ng.probe($0).injector.get(ng.probe($0).providerTokens
    .find(x => x.name === 'MyService'))

也可以看看

> Trigger Angular change detection from console

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读