Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

911
Vistas
¿Qué hace el atributo "ng-reflect-*" en Angular2/4?

Aquí tengo una estructura de datos compleja en una aplicación Angular4.

Es un multigrafo dirigido parametrizado con diccionarios tanto en nodos como en enlaces. Mis componentes angulares están trabajando en este complejo modelo de datos.

En Angular2.4, todo funcionó bien. Desde que cambiamos a Angular4, obtengo esto en mi DOM:

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

... que se genera a partir del siguiente fragmento de plantilla:

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

Tenga en cuenta model aquí es simplemente un miembro de datos de mi componente. No tiene (... no debería tener) significado específico de Angular2. Es parte de la compleja estructura de datos detrás de mi aplicación.

¡Mi primera impresión es que Angular serializa el miembro de datos del model de la clase de componente, obtiene sus primeros 30 caracteres y luego coloca esta cosa totalmente inútil en el DOM!

¿Tengo razón? ¿Qué es todo este ng-reflect-model en el DOM, qué propósito específico tiene en Angular4 que no tenía en Angular2?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Los atributos ng-reflect-${name} se agregan con fines de depuración y muestran los enlaces de entrada que un componente/directiva ha declarado en su clase. Entonces, si su componente se declara así:

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

el html resultante se representará así:

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

Existen solo cuando se usa el modo de depuración: modo predeterminado para Angular. Para deshabilitarlos, use

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

dentro del archivo main.ts Estos atributos son agregados por esta función aquí :

 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); <-----------------
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda