Вы можете использовать следующее:
@Component({
(...)
template: `
<div *ngFor="let i of Arr(num).fill(1)"></div>
`
})
export class SomeComponent {
Arr = Array; //Array type captured in a variable
num:number = 20;
}
Или реализовать пользовательский канал:
import {PipeTransform, Pipe} from '@angular/core';
@Pipe({
name: 'fill'
})
export class FillPipe implements PipeTransform {
transform(value) {
return (new Array(value)).fill(1);
}
}
@Component({
(...)
template: `
<div *ngFor="let i of num | fill"></div>
`,
pipes: [ FillPipe ]
})
export class SomeComponent {
arr:Array;
num:number = 20;
}
объявление События добавляет слой абстракции и защиты на делегат экземпляр. Эта защита препятствует тому, чтобы клиенты делегата сбросили делегата и ее список вызова и только позволяет добавлять или удалять цели из списка вызова.
В дополнение к синтаксическим и операционным свойствам существует также семантическое различие.
Делегаты являются, концептуально, шаблонами функций; то есть, они выражают контракт, функция должна придерживаться того, для рассмотрения "типа" делегата.
События представляют... хорошо, события. Они предназначаются для предупреждения кого-то, когда что-то происходит и да, они придерживаются определения делегата, но они не то же самое.
, Даже если они были точно тем же самым (синтаксически и в коде IL) там все еще останется семантическим различием. В целом я предпочитаю иметь два различных названия двух различных понятий, даже если они реализованы таким же образом (который не означает, что мне нравится иметь тот же код дважды).
Вы также можете использовать события в объявлениях интерфейса, но не для делегатов.