我正在尝试学习angular2并使用odata webapi后端创建了一个测试应用程序.
在应用程序中,我有一个视图,它获取一个项目数组,我想在我的视图中显示这些.
原文链接:https://www.f2er.com/angularjs/142267.html在应用程序中,我有一个视图,它获取一个项目数组,我想在我的视图中显示这些.
为了从前端获取数据我正在使用breezejs库,因为它已经证明在过去节省了我很多时间,我喜欢将它与odata后端一起使用.
调用树和应用程序结构如下所示:
通过从视图中调用服务函数开始调用以开始获取项目(请注意,我将从每次调用返回es-6承诺):
this._scrumModuleService.fetchActiveSessions().then((sessions: ScrumSession[]) => { // Here i have to call zone.run else my view wont update. this._zone.run(() => { this.sessions = sessions; }); }).catch((error: any) => { debugger; });
然后从视图中它将转到服务,该服务又调用存储库:
public fetchActiveSessions(): Promise<ScrumSession[]> { return this._scrumSessionRepository.fetchActiveSessions(); }
public fetchActiveSessions(): Promise<ScrumSession[]> { return this._dataContext.fetch(new breeze.EntityQuery().from("ScrumSessions").expand(['creator','scrumRoom','productOwner','users'])); }
然后最终存储库调用(通用)datacontext,它将使用breeze entitymanager执行查询:
public fetch(query: breeze.EntityQuery,isRetry: boolean = false): Promise<any> { return new Promise((resolve,reject) => { this.entityManager.executeQuery(query).then((result: breeze.QueryResult): void => { // Data has been fetched,resolve the results resolve(result.results); }); }); }
现在你可以在视图中看到我必须使用NgZone的run函数,否则我的视图不会更新.我想知道为什么我必须这样做,因为我期待angular2自动为我看到这个.
我已经挖掘了几个类似的问题,但还没找到答案.我还包括了另一个线程中建议的angular2-polyfills脚本,但是没有解决它.