不能用 ngOnChanges 侦测query结果集的变化, 要用 observable subscribe

http://www.open-open.com/lib/view/open1461113267205.html

在 AngularJS 1 里,如果想要监听一个数据的变化,需要设置一个 $scope.$watch , 然后在每次digest cycle里手动判断数据变了没。在 angular2 里, ngOnChanges 钩子把这个过程变得异常简单。只要你在组件里定义了 ngOnChanges 方法,在输入数据发生变化时该方法就会被自动调用。这超屌的!

不过需要注意的是, ngOnChanges 当且仅当组件输入数据变化时被调用,“输入数据”指的是通过 @Input 装饰器显式指定的那些数据。如果是 @ViewChildren , @ContentChildren 的结果集增加/删除了数据, ngOnChanges 是不会被调用的。

如果你希望在query结果集变化时收到通知,那不能用 ngOnChanges 。应该通过query结果集的 changes 属性订阅其内置的observable。只要你在正确的钩子里订阅成功了(不是构造器里),当结果集变化时,你就会收到通知。

举例,代码应该是这个样子的:

通过 changes 订阅observable,监听query结果集变化(推荐)

@Component({ selector: 'my-list' })
export class MyList implements AfterContentInit {
  @ContentChildren(ListItem) items: QueryList<ListItem>;

  ngAfterContentInit() {
    this.items.changes.subscribe(() => {
       // will be called every time an item is added/removed
    });
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值