【发布时间】:2016-03-20 17:05:46
【问题描述】:
我有一个非常简单的管道:
app.DisplayKeystrokePipe = ng.core
.Pipe({
name: "displayKeystroke"
})
.Class({
transform: function() {
}
});
还有一个更复杂的组件/指令:
app.DropDownCmp = ng.core
.Component({
selector: "dropdown",
templateUrl: "dropdown.html",
inputs: [
'list',
'selected'
],
outputs: [
'selectedChange'
]
})
.Class({
constructor: function() {
this.selectedChange = new ng.core.EventEmitter();
this.display = "Hello";
this.onClickHandler = function(event) {
if(this.listVisible && !$(event.target).is(".dropdown-display") && !$(event.target).parents(".dropdown-display").length > 0) {
this.listVisible = false;
}
}.bind(this);
},
isSelected: function(id) {
return id == this.selected;
},
show: function() {
this.listVisible = true;
},
select: function(id) {
this.selected = id;
this.selectedChange.next(id);
},
ngOnInit: function() {
document.addEventListener('click', this.onClickHandler)
},
ngOnDestroy: function() {
document.removeEventListener('click', this.onClickHandler);
},
ngOnChanges: function(changes) {
this.display = this.list[this.selected];
},
});
现在我正在尝试在一个模板中同时使用这两种功能:
app.SomeComponent = ng.core
.Component({
template: `<dropdown [list]="someList" [(selected)]="currentEntry"></dropdown><br>{{1 | displayKeystroke}}`,
directives: [app.DropDownCmp],
pipes: [app.DisplayKeystrokePipe]
})
.Class({
constructor: [ng.router.RouteData, app.LinkService, function(rd, service) {
service.setPath(rd.data.catName, rd.data.name);
this.someList = ['Entry1', 'Entry2', 'Entry3'];
this.currentEntry = 0;
}]
});
但是,我收到错误消息:EXCEPTION: No Directive annotation found on constructor
当我只在模板中使用指令时,它可以工作:
template: `<dropdown [list]="someList" [(selected)]="currentEntry"></dropdown>`
当我只使用管道时也是这样:
template: `{{1 | displayKeystroke}}`
只有当我同时使用两者时才会出现此错误。
我做错了什么?
编辑:Plunker:http://plnkr.co/edit/A0hnvvVC6oxZBqIE38Eu?p=preview
【问题讨论】:
-
我没有你所有的代码,所以我在plnkr 中将它减少到最低限度,它工作正常。使用相同的 plnkr,将其分叉,然后在可以重现错误时共享它。
标签: angular