Ответ 1
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
файла. Эти атрибуты добавляются эта функция здесь:
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); <-----------------