fix(ivy): host attributes and @COmponentChild should be supported on the same component (#29565)
PR Close #29565
This commit is contained in:
parent
12c9bd257d
commit
d4c4a89431
|
@ -203,6 +203,12 @@ export function createRootComponent<T>(
|
||||||
|
|
||||||
hostFeatures && hostFeatures.forEach((feature) => feature(component, componentDef));
|
hostFeatures && hostFeatures.forEach((feature) => feature(component, componentDef));
|
||||||
|
|
||||||
|
// We want to generate an empty QueryList for root content queries for backwards
|
||||||
|
// compatibility with ViewEngine.
|
||||||
|
if (componentDef.contentQueries) {
|
||||||
|
componentDef.contentQueries(RenderFlags.Create, component, rootView.length - 1);
|
||||||
|
}
|
||||||
|
|
||||||
const rootTNode = getPreviousOrParentTNode();
|
const rootTNode = getPreviousOrParentTNode();
|
||||||
if (tView.firstTemplatePass && componentDef.hostBindings) {
|
if (tView.firstTemplatePass && componentDef.hostBindings) {
|
||||||
const expando = tView.expandoInstructions !;
|
const expando = tView.expandoInstructions !;
|
||||||
|
@ -217,12 +223,6 @@ export function createRootComponent<T>(
|
||||||
renderInitialStyles(native, rootTNode.stylingTemplate, componentView[RENDERER]);
|
renderInitialStyles(native, rootTNode.stylingTemplate, componentView[RENDERER]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We want to generate an empty QueryList for root content queries for backwards
|
|
||||||
// compatibility with ViewEngine.
|
|
||||||
if (componentDef.contentQueries) {
|
|
||||||
componentDef.contentQueries(RenderFlags.Create, component, rootView.length - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return component;
|
return component;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* Use of this source code is governed by an MIT-style license that can be
|
* Use of this source code is governed by an MIT-style license that can be
|
||||||
* found in the LICENSE file at https://angular.io/license
|
* found in the LICENSE file at https://angular.io/license
|
||||||
*/
|
*/
|
||||||
import {Component, Directive, HostBinding, HostListener, Input, QueryList, ViewChildren} from '@angular/core';
|
import {Component, ContentChild, Directive, HostBinding, HostListener, Input, QueryList, TemplateRef, ViewChildren} from '@angular/core';
|
||||||
import {TestBed} from '@angular/core/testing';
|
import {TestBed} from '@angular/core/testing';
|
||||||
import {By} from '@angular/platform-browser';
|
import {By} from '@angular/platform-browser';
|
||||||
import {expect} from '@angular/platform-browser/testing/src/matchers';
|
import {expect} from '@angular/platform-browser/testing/src/matchers';
|
||||||
|
@ -102,4 +102,19 @@ describe('acceptance integration tests', () => {
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
}).not.toThrow();
|
}).not.toThrow();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should support host attribute and @ContentChild on the same component', () => {
|
||||||
|
@Component(
|
||||||
|
{selector: 'test-component', template: `foo`, host: {'[attr.aria-disabled]': 'true'}})
|
||||||
|
class TestComponent {
|
||||||
|
@ContentChild(TemplateRef) tpl !: TemplateRef<any>;
|
||||||
|
}
|
||||||
|
|
||||||
|
TestBed.configureTestingModule({declarations: [TestComponent]});
|
||||||
|
const fixture = TestBed.createComponent(TestComponent);
|
||||||
|
fixture.detectChanges();
|
||||||
|
|
||||||
|
expect(fixture.componentInstance.tpl).not.toBeNull();
|
||||||
|
expect(fixture.debugElement.nativeElement.getAttribute('aria-disabled')).toBe('true');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue