curso - ¿Qué hace el atributo "ng-reflect-*" en Angular2/4?
angular wikipedia (1)
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 modelo de datos complejo.
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 que el
model
aquí es simplemente un miembro de datos de mi componente.
No tiene (... no debería tener) un 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 30 primeros caracteres y luego coloca esta cosa totalmente inútil en el DOM.
Estoy en lo cierto?
¿Qué es todo este
ng-reflect-model
en el DOM, qué propósito específico tiene en Angular4 y qué no tenía en Angular2?
ng-reflect-${name}
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>
Solo existen 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); <-----------------