前言:我是Meteor,Angular和Typescript的新手,因此在這裏某處出現XY問題的可能性非常大。使用組件輸入更新模板
我正在使用流星和2角(使用angular2-meteor包)一個簡單的項目管理應用程序,其中結構(現在)由具有活動項目。一個視圖是項目列表。點擊一個項目會顯示項目細節的模式,包括項目事件的列表。因此,三個組件:ProjectList
,ProjectDetails
和ProjectEventsList
。 ProjectDetails
使用Session
變量來知道哪個項目要顯示,並且工作。但是,模型中的事件列表在爲單擊的第一個項目創建後不會更新。
ProjectEventsList.ts
import {Component, View} from 'angular2/core';
import {MeteorComponent} from 'angular2-meteor';
import {ProjectEvents} from 'collections/ProjectEvents';
@Component({
selector: 'projectEventsList',
inputs: ['projectId']
})
@View({
templateUrl: '/client/projectEventsList/projectEventsList.html'
})
export class ProjectEventsList extends MeteorComponent {
projectEvents: Mongo.Cursor<ProjectEvent>;
projectId: string;
constructor() {
super();
this.subscribe('projectEvents', this.projectId,() => {
this.autorun(() => {
this.projectEvents = ProjectEvents.find({projectId: this.projectId});
}, true);
});
}
}
據我瞭解(雖然我可能會在這裏下車的方式),我有困難得到autorun
,好了,自動運行。我試過在projectId
上放置一個getter和setter,當點擊一個項目時它會更新,但autorun
內的代碼在第一次點擊後不會運行。我試過的東西:
- 切換嵌套
subscribe()
和autorun()
。 - 將自動綁定參數添加到
subscribe()
和autorun()
。我真的不明白應該做什麼。 移動訂閱代碼到一個setter上
projectId
:private _projectId: string = ''; get projectId() { return this._projectId; } set projectId(id: string) { this._projectId = id; this.subscribe('projectEvents', this._projectId,() => { this.projectEvents = ProjectEvents.find({projectId: this._projectId}); }, true); }
當我做這個名單停止顯示任何項目。
如果這一切似乎像它應該工作,我將創建一個小的測試案例後,但我希望的東西在這裏將是明顯錯誤的那些誰知道。謝謝!
關於有關區域的上半年:這是不是一個概念我很熟悉,所以感謝提醒我這樣的區分(即角區外運行的代碼)!涼。但是,我不認爲它解決了根本問題 - 自動運行永遠不會自動運行。 – Trygve
是的,我花了一段時間纔開始理解你的問題。第二部分呢?該事件來自哪裏? –
'ProjectEventsList'被插入到'ProjectDetails'中: ' projectEventsList>' 我不完全確定你是什麼意思的事件,但是當我在'ProjectList'中單擊一個項目,它更新'ProjectDetails'並將新的輸入值發送到'ProjectEventsList'。但是然後'ProjectEventsList'不對這個更新的id做任何事情。 –
Trygve