Как работает реализация переменной области видимости в *ngFor

В Angular мы можем использовать *ngFor следующим образом:

<li *ngFor="let hero of heroes">
  {{ hero }}
</li>

Но как Angular определяет переменную области действия hero и смогу ли я реализовать то же самое? Меня интересует только переменная с областью видимости, а не циклическая часть.


person Yeater    schedule 24.01.2019    source источник


Ответы (2)


Хорошо, я смог решить свою проблему. Я не понял, что сам могу использовать следующий синтаксис:

*ngFor="let test...."

С этим я смог создать следующую директиву:

import { Directive, TemplateRef, ViewContainerRef } from '@angular/core';

@Directive({
  selector: '[appWrapper]',
})
export class WrapperDirective {
  constructor(viewContainer: ViewContainerRef, template: TemplateRef<any>) {
    viewContainer.createEmbeddedView(
      template,
      { ['$implicit']: 'Max Mustermann' },
      0,
    );
  }
}

Теперь эту директиву можно использовать следующим образом:

<div *appWrapper="let name">{{ name }}</div>

Есть ли способ избавиться от части let name?

Этот пост Stackoverflow помог мне реализовать мою идею

person Yeater    schedule 24.01.2019

Все общедоступные переменные (функции), определенные в component.ts, доступны из component.html и могут быть показаны с помощью интерполяция и выражение шаблона

Когда у вас есть *ngFor, когда вы определяете «пустую переменную массива», переменная доступна внутри *ngFor и является каждым элементом массива

Если вы хотите объявить переменную, используйте ng-if- пусть, например.

<div *ngIf="'hello word' as greeting">
  {{greeting}}
</div>
person Eliseo    schedule 24.01.2019
comment
Извините, но я думаю, что вы неправильно поняли мой вопрос. Взгляните на мое решение, так вы сможете понять мой вопрос. - person Yeater; 24.01.2019
comment
извините за мой ответ, я обновляю его. Нг-если-пусть вы ищете? - person Eliseo; 24.01.2019
comment
Я просто искал способ передать переменную области действия из компонента (в данном случае директивы) его дочернему элементу. - person Yeater; 24.01.2019