【发布时间】:2016-01-15 09:37:27
【问题描述】:
我有一个根应用程序组件,它在模板中这样定义。
template: `
<dev-table (complete)="onSelect(developer)"></dev-table>
<dev-details [selectedDeveloper]="selectedDeveloper"></dev-details>
`
directives: [DevDetailsComponent, DevTableComponent],
providers: [DevValueService, provide(DevService, {useClass: DevService})]
是一个列表,在选择其中一个内部列表时,它应该发送列表(开发者)的值,该列表作为选定的开发者传入。 @Input 定义正确并被正确考虑。但是@output 给出了错误Error: Output is not defined 需要什么定义或定义方法是什么。我错过了一些东西。
这是类定义:
@Component({
selector: 'dev-table',
template: `
<ul class="dev">
<li *ngFor="#developer of developers"
[class.selected]="developer === selectedDeveloper;this.complete.next();"
(click)="onSelect(developer)">
<span class="spanbackground">{{developer.name}}</span> - {{developer.skill}}
</li>
</ul>
`,
providers: [DevService]
})
export class DevTableComponent implements OnInit{
public developers : Developer[];
public selectedDeveloper : Developer;
constructor(private _DevService: DevService) { }
@Output() complete = new EventEmitter();
public onSelect(developer: Developer) { this.selectedDeveloper = developer; }
getDevelopers(){
this._DevService.getDevelopers().then(developers => this.developers = developers)
}
ngOnInit(){
this.getDevelopers();
}
}
更新:最终的工作代码没有developer === selectedDeveloper;this.complete.next();,而是将this.complete.next() 放入onSelect 函数中。
【问题讨论】:
-
这个是你加的吗?
import {Output} from "angular2/core"; -
谢谢。我做到了,得到了
Binding expression cannot contain chained expression at column 33 in [developer === selectedDeveloper;this.complete.next();] in DevTableComponent@3:8。我在技术上所做的是将开发人员的价值传递给父组件。然后将其作为输入传递给.dev-details 工作正常,隔离。但无法捕获带值发送的事件。 -
你不能在模板中添加那么多代码,你必须将所有逻辑添加到一个返回布尔值的函数中,并像这样调用它:
[class.selected]="shouldSelect()" -
是的。您使用的任何类都必须导入它。 OnInit、开发人员、DevService ...
-
试试
onSelect($event)?