Ответ 1
Я думаю, что локальные переменные (определенные с символом #
) не применяются для вашего прецедента.
Фактически, когда вы определяете локальную переменную в элементе HTML, она соответствует компоненту, если таковая имеется. Когда в элементе нет компонента, переменная относится к самому элементу.
Указание значения для локальной переменной позволяет вам выбрать определенную директиву, связанную с текущим элементом. Например:
<input #name="ngForm" ngControl="name" [(ngModel)]="company.name"/>
задает экземпляр директивы ngForm
, связанной с током в переменной name
.
Таким образом, локальные переменные не нацелены на то, что вы хотите, т.е. устанавливаете значение, созданное для текущего элемента цикла.
Если вы попытаетесь сделать что-то подобное:
<div *ngFor="#elt of eltList" >
<span #localVariable="elt.title"></span>
{{localVariable}}
</div>
У вас будет следующая ошибка:
Error: Template parse errors:
There is no directive with "exportAs" set to "elt.title" ("
<div *ngFor="#elt of eltList" >
<span [ERROR ->]#localVariable="elt.title"></span>
{{localVariable}}
</div>
"): [email protected]:10
Angular2 фактически ищет директиву, соответствующую указанному имени elt.title
здесь)... См. этот plunkr для воспроизведения ошибки: https://plnkr.co/edit/qcMGr9FS7yQD8LbX18uY?p=preview
Для получения дополнительной информации см. эту ссылку: http://victorsavkin.com/post/119943127151/angular-2-template-syntax, раздел "Локальные переменные".
В дополнение к текущему элементу итерации ngForm
предоставляет только набор экспортированных значений, которые могут быть сглажены локальным переменным: index
, last
, even
и odd
.
Смотрите эту ссылку: https://angular.io/docs/ts/latest/api/common/NgFor-directive.html
Что вы можете сделать, так это создать дополнительный компонент для отображения элементов в цикле. Он примет текущий элемент как параметр и создаст вашу "локальную переменную" как атрибут компонента. Затем вы сможете использовать этот атрибут в шаблоне компонента, чтобы он был создан один раз для каждого элемента цикла. Вот пример:
@Component({
selector: 'elt',
template: `
<div>{{attr}}</div>
`
})
export class ElementComponent {
@Input() element;
constructor() {
// Your old "localVariable"
this.attr = createAttribute(element.title);
}
createAttribute(_title:string) {
// Do some processing
return somethingFromTitle;
}
}
и способ его использования:
<div *ngFor="#elt of eltList" >
<elt [element]="elt></elt>
</div>
Edit
После вашего комментария, я думаю, что вы попробуете подход, описанный в этом ответе. Вот более подробная информация: создать динамическое имя-anchorName/Components с ComponentResolver и ngFor в Angular2.
Надеюсь, это поможет вам, Thierry