【问题标题】:Updating data that is passed into child component Angular2更新传递给子组件 Angular2 的数据
【发布时间】:2016-10-31 06:24:07
【问题描述】:

我是 Angular2 - Meteor 开发的新手。我在使用父子组件时偶然发现了一个问题。在父组件中,我让流星订阅了一个集合。

users: any;

constructor(private _zone:NgZone){


    var sub =  Meteor.subscribe("accounts/users");
    Tracker.autorun(function() {
        _zone.run(function() {
            if(sub.ready()){
                this.users = Meteor.users.find().fetch();
                console.log(this.users);
            }
        });
    });

}

用户集合共有 90 个用户。当应用程序最初加载时,只找到当前用户,因此控制台日志显示一个用户。

我不确定我放置的 Tracker.autorun() 和 NgZone 是否正确,但在应用加载一秒钟后,控制台日志显示所有 90 个用户的数组。我认为发生这种情况是因为订阅一开始还没有准备好。

我的子组件将获取的用户作为参数接收,例如 <sd-table [data]="users"></sd-table>。加载应用程序后,在子组件的绘制模板上只能看到一个用户。当订阅发生并且所有用户都可以访问时,是否可以更新模板?

【问题讨论】:

  • 你试过使用流星组件方法吗?
  • 我不这么认为,你是在说这个吗? link

标签: meteor angular components angular-meteor


【解决方案1】:

如果要引用当前类的this,不要使用function()

users: any;

constructor(private _zone:NgZone){
    var sub =  Meteor.subscribe("accounts/users");
    Tracker.autorun(() => {
        _zone.run(() => {
            if(sub.ready()){
                this.users = Meteor.users.find().fetch();
                console.log(this.users);
            }
        });
    });
}

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

【讨论】:

  • 感谢您向我指出这一点,我在我的子组件中使用 ngOnChanges,它最终确定数据发生了变化。但是这发生在模板加载之后,有没有办法在组件接收到新数据时让模板更新?
  • 没有具体的功能,只要设置了user后组件才渲染,只需将*ngIf="users"添加到模板的最外层元素即可。
猜你喜欢
  • 2017-06-01
  • 2017-06-12
  • 1970-01-01
  • 2017-05-12
  • 2023-03-24
  • 2018-07-15
  • 2016-09-19
  • 2017-04-30
  • 1970-01-01
相关资源
最近更新 更多