fix(ivy): content query results should be available in content hooks (#25271)
PR Close #25271
This commit is contained in:
parent
c2c12e52fe
commit
1fb7111da1
@ -301,12 +301,15 @@ function refreshDescendantViews() {
|
|||||||
executeInitHooks(viewData, tView, creationMode);
|
executeInitHooks(viewData, tView, creationMode);
|
||||||
}
|
}
|
||||||
refreshDynamicEmbeddedViews(viewData);
|
refreshDynamicEmbeddedViews(viewData);
|
||||||
|
|
||||||
|
// Content query results must be refreshed before content hooks are called.
|
||||||
|
refreshContentQueries(tView);
|
||||||
|
|
||||||
if (!checkNoChangesMode) {
|
if (!checkNoChangesMode) {
|
||||||
executeHooks(directives !, tView.contentHooks, tView.contentCheckHooks, creationMode);
|
executeHooks(directives !, tView.contentHooks, tView.contentCheckHooks, creationMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
setHostBindings(tView.hostBindings);
|
setHostBindings(tView.hostBindings);
|
||||||
refreshContentQueries(tView);
|
|
||||||
refreshChildComponents(tView.components);
|
refreshChildComponents(tView.components);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1708,12 +1708,19 @@ describe('query', () => {
|
|||||||
describe('content', () => {
|
describe('content', () => {
|
||||||
|
|
||||||
it('should support content queries for directives', () => {
|
it('should support content queries for directives', () => {
|
||||||
let withContentInstance: WithContentDirective;
|
let withContentInstance: WithContentDirective|null = null;
|
||||||
|
|
||||||
class WithContentDirective {
|
class WithContentDirective {
|
||||||
// @ContentChildren('foo') foos;
|
// @ContentChildren('foo') foos;
|
||||||
// TODO(issue/24571): remove '!'.
|
|
||||||
foos !: QueryList<ElementRef>;
|
foos !: QueryList<ElementRef>;
|
||||||
|
contentInitQuerySnapshot = 0;
|
||||||
|
contentCheckedQuerySnapshot = 0;
|
||||||
|
|
||||||
|
ngAfterContentInit() { this.contentInitQuerySnapshot = this.foos ? this.foos.length : 0; }
|
||||||
|
|
||||||
|
ngAfterContentChecked() {
|
||||||
|
this.contentCheckedQuerySnapshot = this.foos ? this.foos.length : 0;
|
||||||
|
}
|
||||||
|
|
||||||
static ngComponentDef = defineDirective({
|
static ngComponentDef = defineDirective({
|
||||||
type: WithContentDirective,
|
type: WithContentDirective,
|
||||||
@ -1746,7 +1753,18 @@ describe('query', () => {
|
|||||||
}, [WithContentDirective]);
|
}, [WithContentDirective]);
|
||||||
|
|
||||||
const fixture = new ComponentFixture(AppComponent);
|
const fixture = new ComponentFixture(AppComponent);
|
||||||
expect(withContentInstance !.foos.length).toBe(1);
|
expect(withContentInstance !.foos.length)
|
||||||
|
.toBe(1, `Expected content query to match <span #foo>.`);
|
||||||
|
|
||||||
|
expect(withContentInstance !.contentInitQuerySnapshot)
|
||||||
|
.toBe(
|
||||||
|
1,
|
||||||
|
`Expected content query results to be available when ngAfterContentInit was called.`);
|
||||||
|
|
||||||
|
expect(withContentInstance !.contentCheckedQuerySnapshot)
|
||||||
|
.toBe(
|
||||||
|
1,
|
||||||
|
`Expected content query results to be available when ngAfterContentChecked was called.`);
|
||||||
});
|
});
|
||||||
|
|
||||||
// https://stackblitz.com/edit/angular-wlenwd?file=src%2Fapp%2Fapp.component.ts
|
// https://stackblitz.com/edit/angular-wlenwd?file=src%2Fapp%2Fapp.component.ts
|
||||||
|
Loading…
x
Reference in New Issue
Block a user