【问题标题】:Meteor Angular 2: ngFor doesn't update when model is extendedMeteor Angular 2:模型扩展时 ngFor 不更新
【发布时间】:2016-06-11 18:39:53
【问题描述】:

我有以下场景:

我从数据库(meteor/mongo)加载一些东西,例如与:

this.subscribe('cards', options, () => {
    this.cards = Cards.find({}, {sort: this.sortObject.get()});
}, true);

在模板中,我使用 *ngFor="#card of cards" 遍历这些项目

当我在某个动作上扩展对象时,例如

this.cards.forEach((card:Card) => {
  card.distance = someValue;
});

模板没有更新,即当我使用{{card.distance}}时,它不显示。

是否无法使用流星和角度 2 扩展订阅的对象/列表?

【问题讨论】:

  • forEach之后尝试this.cards=this.cards.slice();
  • 感谢提示,我试过了,但得到了错误Property 'slice' does not exist on type 'Cursor...
  • 如果forEach 不是数组,如何迭代?
  • 它是一个流星/mongo 光标,显然有 forEach 但没有切片
  • 是否有toArray()。这可能也会起作用。

标签: meteor angular


【解决方案1】:

这应该可以。这是我尝试过的:

class Company {
  constructor(private name:string) { }
}

@Component({
  selector: 'contacts-list',
  template: `
    <ul>
      <li *ngFor="#company of companies">{{company.name}} - {{company.distance}}</li>
    </ul>
    <div (click)="update()">Update</div>
    <ul>
      <li *ngFor="#company of rawCompanies">{{company.name}} - {{company.distance}}</li>
    </ul>
    <div (click)="updateRaw()">Update</div>
  `
})
export class ContactsList {
  constructor () {
    this.companies = [
      new Company('company 1'),
      new Company('company 2'),
      new Company('company 3'),
    ];

    this.rawCompanies = [
      { name: 'company 1' },
      { name: 'company 2' },
      { name: 'company 3' }
    ];
  }

  update() {
    this.companies.forEach((company:Company) => {
      company.name = company.name + 'a';
      company.distance = 'test';
    });
  }

  updateRaw() {
    this.rawCompanies.forEach((company) => {
      company.name = company.name + 'a';
      company.distance = 'test';
    });
  }
}

updaterawUpdate 都更新了视图...我错过了什么吗?

看到这个 plunkr:https://plnkr.co/edit/86i8RHYrFfRnTMMoQ1lH?p=preview

【讨论】:

猜你喜欢
  • 2016-10-10
  • 2018-08-29
  • 2016-06-02
  • 1970-01-01
  • 2017-11-03
  • 2017-05-09
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多