parent
b10540a0b5
commit
285dd6be34
|
@ -10,6 +10,7 @@
|
|||
// correctly implementing its interfaces for backwards compatibility.
|
||||
import {Observable} from 'rxjs/Observable';
|
||||
|
||||
import {EventEmitter} from '../event_emitter';
|
||||
import {QueryList as viewEngine_QueryList} from '../linker/query_list';
|
||||
import {Type} from '../type';
|
||||
import {getSymbolIterator} from '../util';
|
||||
|
@ -295,7 +296,7 @@ function createPredicate<T>(
|
|||
|
||||
class QueryList_<T>/* implements viewEngine_QueryList<T> */ {
|
||||
readonly dirty = true;
|
||||
readonly changes: Observable<T>;
|
||||
readonly changes: Observable<T> = new EventEmitter();
|
||||
private _values: T[] = [];
|
||||
/** @internal */
|
||||
_valuesTree: any[] = [];
|
||||
|
@ -367,9 +368,12 @@ class QueryList_<T>/* implements viewEngine_QueryList<T> */ {
|
|||
(this as{dirty: boolean}).dirty = false;
|
||||
}
|
||||
|
||||
notifyOnChanges(): void { throw new Error('Method not implemented.'); }
|
||||
notifyOnChanges(): void { (this.changes as EventEmitter<any>).emit(this); }
|
||||
setDirty(): void { (this as{dirty: boolean}).dirty = true; }
|
||||
destroy(): void { throw new Error('Method not implemented.'); }
|
||||
destroy(): void {
|
||||
(this.changes as EventEmitter<any>).complete();
|
||||
(this.changes as EventEmitter<any>).unsubscribe();
|
||||
}
|
||||
}
|
||||
|
||||
// NOTE: this hack is here because IQueryList has private members and therefore
|
||||
|
@ -396,6 +400,7 @@ export function queryRefresh(query: QueryList<any>): boolean {
|
|||
const queryImpl = (query as any as QueryList_<any>);
|
||||
if (query.dirty) {
|
||||
query.reset(queryImpl._valuesTree);
|
||||
query.notifyOnChanges();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -826,4 +826,34 @@ describe('query', () => {
|
|||
});
|
||||
|
||||
});
|
||||
|
||||
describe('observable interface', () => {
|
||||
|
||||
it('should allow observing changes to query list', () => {
|
||||
const queryList = new QueryList();
|
||||
let changes = 0;
|
||||
|
||||
queryList.changes.subscribe({
|
||||
next: (arg) => {
|
||||
changes += 1;
|
||||
expect(arg).toBe(queryList);
|
||||
}
|
||||
});
|
||||
|
||||
// initial refresh, the query should be dirty
|
||||
qR(queryList);
|
||||
expect(changes).toBe(1);
|
||||
|
||||
|
||||
// refresh without setting dirty - no emit
|
||||
qR(queryList);
|
||||
expect(changes).toBe(1);
|
||||
|
||||
// refresh with setting dirty - emit
|
||||
queryList.setDirty();
|
||||
qR(queryList);
|
||||
expect(changes).toBe(2);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue