在这里,我在一个Angular4应用程序中有一个复杂的数据 struct .

它是一个在 node 和链接上都使用字典参数化的有向多重图.我的Angular 组件正在处理这个复杂的数据模型.

在Angular2.4.一切顺利.自从我们切换到Angular4,我就把它放到了我的DOM中:

<g flareNode="" ng-reflect-model="{'id':'an-id-of-my-object'">

...由以下模板片段生成:

<svg:g flareNode [model]="item"></svg:g>

注意,这里model只是我的组件的一个数据成员.它没有(……应该没有)特定的Angular 意义.它是我应用程序背后复杂数据 struct 的一部分.

我的第一印象是那个棱角分明的serializes the 100 data member of the component class, gets its 30 first characters, and then puts this totally useless thingy into the DOM!

我说的对吗?DOM中的整个ng-reflect-model是什么,它在Angular 4中有什么特别的用途,在Angular 2中没有的是什么?

推荐答案

添加ng-reflect-${name}个属性用于调试目的,并显示组件/指令在其类中声明的输入绑定.因此,如果您的组件是这样声明的:

class AComponent {
  @Input() data;
  @Input() model;
}

生成的HTML将呈现如下所示:

<a-component ng-reflect-data="..." ng-reflect-model="...">
   ...
<a-component>

它们仅在使用调试模式(Angular 的默认模式)时存在.要禁用它们,请使用

import {enableProdMode} from '@angular/core';

enableProdMode();

main.ts文件内部.这些属性加this function here:

function debugCheckAndUpdateNode(...): void {
  const changed = (<any>checkAndUpdateNode)(view, nodeDef, argStyle, ...givenValues);
  if (changed) {
    const values = argStyle === ArgumentType.Dynamic ? givenValues[0] : givenValues;
    if (nodeDef.flags & NodeFlags.TypeDirective) {
      const bindingValues: {[key: string]: string} = {};
      for (let i = 0; i < nodeDef.bindings.length; i++) {
        const binding = nodeDef.bindings[i];
        const value = values[i];
        if (binding.flags & BindingFlags.TypeProperty) {
          bindingValues[normalizeDebugBindingName(binding.nonMinifiedName !)] =
              normalizeDebugBindingValue(value); <------------------
        }
      }

    ...

    for (let attr in bindingValues) {
      const value = bindingValues[attr];
      if (value != null) {
        view.renderer.setAttribute(el, attr, value); <-----------------

Angular相关问答推荐

Primeng 12Angular 12自定义库:错误符号字段集声明于...在编译保存后未从Primeng/fieldset中导出

Angular router-outlet 未渲染

如何从URL中角下载图片?

在Angular 为17的独立零部件中使用@NGX-平移

bootstrap 可折叠菜单在单击时未展开.Angular 应用程序

元素上的Angular 管道链接不起作用

是否可以在Angular(12+)中迭代指定的范围而不是整个数组

为什么初始化值为 1 的BehaviorSubject 不能分配给类型number?

Angular 15 在 URL 中使用@进行路由

升级到 Webpack 5.79.0 后 NX Angular 项目构建失败

NX MFE Angular 模块联合无法访问远程微前端

如何有条件地更新 Angular 路由解析器数据?

TypeError:this.restoreDialogRef.afterClosed 不是函数

关闭 Dynamsoft Web Twain 弹出窗口

为什么 HttpParams 在 Angular 4.3 中的多行中不起作用

如何在 Angular 4 中获取 HttpClient 状态码

在Angular 4中以'yyyy-MM-dd'格式获取当前日期

在 Angular 中动态设置样式

在Angular2中获取服务的域名

此类通过 SomeModule -> SomeComponent 对消费者可见,但不会从顶级库入口点导出