直到单击任何对象,Angular 2才会更新

Nat*_*han 4 javascript angular

以下是我尝试基于Angular教程进行的工作。

export class DashboardComponent implements OnInit {
      title = 'Current Robots';
      private sobots: Robot[];

      constructor(
        private router: Router,
        private sobotService: RobotService) { 
      }

      getRobots() { 
          this.sobotService.getRobots().then(sobots => Array.prototype.push.apply(this.sobots, sobots.data));     
      }

      ngOnInit() {
          this.getRobots();
      }

      gotoDetail(sobot: Robot) {
        let link = ['/detail', sobot.Id];
        this.router.navigate(link);
      }
Run Code Online (Sandbox Code Playgroud)

和看法

<h3>{{title}}</h3>
<div class="grid grid-pad">        
  <div *ngFor="let sobot of sobots" (click)="gotoDetail(sobot)" class="col-1-4">
    <div class="module sobot">
      <p>HostKey</p>
      <h4>{{sobot.HostKey}}</h4>
    </div>
  </div>
</div>
<sobot-search></sobot-search>
Run Code Online (Sandbox Code Playgroud)

sobots.data看起来正在按预期返回数据对象-但是,直到我单击任何按钮/路由/任何事件后,它仍然没有更新。

控制台中未显示任何错误,我很困惑!

我继续尝试确保它只是将数据添加到原始数组对象中,但是这似乎还是行不通的!

Nat*_*han 6

因此,事实证明sobotService返回的是q.js承诺而不是ES6承诺。我相信这可能就是为什么它没有像我在《英雄指南》中那样更新的原因。

通过强制其在区域中进行更新,例如:

  this.sobotService .getRobots().then(ODataRobots => {
      this.zone.run(() => this.sobots = ODataRobots.data);          
  });
Run Code Online (Sandbox Code Playgroud)

诺言解决后,它设法更新了视图。

我可能必须弄清楚是否有一种简单的方法可以从我正在使用的库(o.js)中删除q.js承诺,但与此同时,它可以按预期运行!