Iv'e最近開始一個新項目,並決定給Angular 2一個機會。 作爲一名前骨幹開發人員,我現在面臨着對我來說真的很陌生的工作類型。Angular2嵌套組件和模板層次結構
我正在嘗試構建一個非常簡單的應用程序:我想要一個課室對象,並在其中列出學生列表。 在我看來,他們每個人(教室,學生)應該是不同的組件,這樣每個組件都有自己的模板。
我希望將模板完全分開,並在教室模板上循環顯示學生並呈現學生模板。
例如: 我的課堂組件想要這樣: 從'@ 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>
但上面代碼什麼也沒有顯示。 似乎學生數據沒有傳遞給學生對象。 Iv'e看到一些例子,傳遞整個對象了,是這樣的:
[student]="student"
但感覺真的錯了。例如,在Backbone中,我將呈現父視圖,並在其中添加所有子視圖。 這裏感覺很奇怪。
另一個解決方案Iv'e看到的僅僅是將學生模板添加到教室模板,而不是將它們保存在單獨的文件中。 我必須說我真的不喜歡這種做法,因爲我相信這些組件應該不會一起生活在同一個文件中。
另一件事,@Input()
代表什麼?我從文檔中不明白爲什麼@Input()
可以訪問數據。
在這一點上,我比以下更困惑:]我真的很感激一些技巧和你的反饋,並學習一些良好的做法,以消除這些任務。
非常感謝!
偉大的,它的工作原理,但有沒有其他方式來做到這一點?我只是好奇 – superuser123
儘管感謝您的回答,但我會在明天之前將其打開,以便聽取更多意見,如果沒有人發言,我會批准它:) – superuser123
@ superuser123如果您將子模板內聯到同一個文件中,而不是如果將它分開,'ngFor'指令中的'student'變量將處於範圍之內,並且可以直接使用而不需要屬性。除此之外,我能想到的只有各種方法都是毫無意義的錯誤。 – Douglas