【发布时间】:2016-11-29 04:31:54
【问题描述】:
我最近开始了一个新项目,并决定给 Angular 2 一个机会。 作为一名前 Backbone 开发人员,我现在面临的工作类型对我来说非常新。
我正在尝试构建一个非常简单的应用程序:我想要一个教室对象,其中包含一个学生列表。 在我看来,它们中的每一个(教室、学生)都应该是不同的组件,因此每个组件都有自己的模板。
我希望将模板完全分离,并在教室模板上循环遍历学生并渲染学生模板。
例如: 我的课堂组件会这样: 从“@angular/core”导入 {Component, OnInit}; 从“app/student.component”导入{Student};
@Component({
selector : 'classroom',
templateUrl : 'app/classroom.component.html',
directives : [Classroom]
})
export class MainContainer implements OnInit {
students : Student[]; // assume I have an array of students here
constructor() {}
}
课堂模板的外观:
<div>
<student *ngFor="let student of students"></student>
</div>
学生组件:
import {Component, Input, Output} from '@angular/core';
@Component({
selector : 'student',
templateUrl : 'build/component/main-box/student.component.html'
})
export class Student {
name : string;
id: number;
grade:number;
constructor() {
}
};
还有学生模板,就这么简单:
<div>
name : {{name}}
id : {{id}}
grade : {{grade}}
</div>
但是上面的代码什么也没显示。 似乎学生数据没有传递给学生对象。 我见过一些通过这种方式传递整个对象的示例:
[student]="student"
但是感觉真的不对。例如,在 Backbone 中,我将渲染父视图,并在其中添加所有子视图。 这里感觉很奇怪。
另一个我见过的解决方案是简单地将学生模板添加到教室模板中,而不是将它们保存在单独的文件中。 我必须说我真的很不喜欢这种做法,因为我认为这些组件不应该放在同一个文件中。
另外,@Input() 代表什么?我从文档中并没有真正理解为什么 @Input() 可以访问数据。
在这一点上,我比没有更困惑 :] 我非常感谢您的一些提示和反馈,并学习一些处理此类任务的良好做法。
非常感谢!
【问题讨论】:
标签: typescript angular