Я изучаю AngularDart.Все прошло так хорошо.Но я застрял со структурными директивами: я не могу понять, как использовать входные переменные шаблона для реализации моей собственной структурной директивы.
Я много раз читал этот документ: Структурные директивы .
И, хотя приведенный ниже материал относится к AngularJS, я прочитал следующие вопросы / документы:
Говорят, что из объявления micosyntax"let v=value
" Angular создает переменную шаблона"let-v
".Однако я не могу использовать имя "let-v
" в шаблоне, поскольку "let-v
" не является допустимым именем переменной.
Кстати, если вы посмотрите на приведенное объяснение здесь для директивы ngFor
:
<div *ngFor="let hero of heroes; let i=index; let odd=odd; trackBy: trackByHeroId"
[class.odd]="odd">
({{i}}) {{hero.name}}
</div>
<template ngFor let-hero [ngForOf]="heroes" let-i="index" let-odd="odd"
[ngForTrackBy]="trackByHeroId">
<div [class.odd]="odd">({{i}}) {{hero.name}}</div>
</template>
Вы видите, что внутри шаблона входная переменная шаблона i
называется i
(не let-i
):
<div [class.odd]="odd">({{i}}) {{hero.name}}</div>
Я попробовал LOT вещей в коде Dart моей структурной директивы.Но ничего не работает.
Я прочитал исходный код директивы NgFor .Что-то потенциально интересное здесь:
viewRef.setLocal('first', identical(i, 0));
viewRef.setLocal('last', identical(i, len - 1));
viewRef.setLocal('index', i);
viewRef.setLocal('count', len);
Однако я попробовал это безуспешно.
Вот простой код, который я написал:
Файл: lib/src/directive_my_dummy.dart
import 'package:angular/angular.dart';
@Directive(
selector: '[myDummy]'
)
class MyDummyDirective implements OnInit {
TemplateRef _templateRef;
ViewContainerRef _viewContainer;
MyDummyDirective(TemplateRef templateRef, ViewContainerRef viewContainer) {
_templateRef = templateRef;
_viewContainer = viewContainer;
}
@Input('let-d')
List<int> d;
void ngOnInit() {
print("One instance of MyDummyDirective is instantiated.");
EmbeddedViewRef vr = _viewContainer.createEmbeddedView(_templateRef);
vr.setLocal('d', [1,2,3]);
print(d.toString());
}
}
Файл: lib/app_component.html
<div *myDummy="let d=data">
This is a dummy test. {{d.toString()}}
</div>
<div *myDummy="let d=[1,2,3]">
This is a dummy test. {{d.toString()}}
</div>
<div *myDummy="let d=getData()">
</div>
<div *myDummy="let d=[1,2,3]; let name='Toto'"></div>
Полный код можно найти здесь .
Можете ли вы показать мне основной пример, который иллюстрируетиспользование шаблона входных переменных?