Ошибка в html, в этом случае директива должна быть объявлена так:
<div [red]="'fasf'" [redData]="'0909'">
Restricted Element Directive
</div>
Подробнее об этом можно прочитать в https://angular.io/guide/attribute-directives#binding -to-an- input-property
Я редактирую, чтобы объяснить, как правильно использовать директиву
После прочтения в документации angular, как она работает и что она это директива, я мог видеть, что вы пытаетесь сделать, это ошибка, учитывая, что если вы используете синтаксис *, вы говорите Angular, что вы объявляете структурную директиву, и поэтому Angular всегда будет иметь значение ваш элемент в том, что я показываю ниже:
Здесь мы используем структурную директиву ngIf:
<div *ngIf="hero" class="name">{{hero.name}}</div>
И Angular всегда будет переводить атрибут в элемент, обернутый вокруг хоста элемент, как это. * ngIf
<ng-template [ngIf]="hero">
<div class="name">{{hero.name}}</div>
</ng-template>
И хотя нигде в документации angular не говорится, что вы не можете использовать селектор из структурной директивы для определенного элемента c DOM, он также абсолютно ничего не говорит о том, что Вы можете использовать его.
Но если вы скажете, что структурная директива выполняет следующее преобразование:
- Директива * ngIf перемещена в элемент, где она стала привязкой свойства, [ngIf ].
- Остальная часть, включая атрибут class, перемещена внутри элемента.
И именно здесь возникает ошибка, отображаемая консолью, поскольку ваш селектор указывает, что сетевая директива может быть только внутри div, и Angular манипулировал директивой и поместил ее в шаблон ng.
Когда это объявлено:
@Directive({
selector: 'div[red]'
})
Директива ограничена только в div, и если в html вы скажете Angular использовать его как структурированную директиву:
<div *red="'fasf'; data '0909'">
Restricted Element Directive
</div>
Внутренне, Angular переводится следующим образом:
<ng-template red [red]="'fasf'" [redData]="'0909'">
<div>Restricted Element Directive</div>
</ng-template>
Какая причина Это ошибка, потому что ваша директива была ограничена для элемента div. Документация объясняет это гораздо более кратко и явно здесь https://angular.io/guide/structural-directives#the -asterisk - префикс
Итак, чтобы ваш код не вызывал ошибку:
- Вы должны использовать директиву атрибута
- Или снять ограничение div.