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

来源:互联网 发布:北京海量数据离职 编辑:程序博客网 时间:2024/05/21 06:30

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
原创粉丝点击