feat(ivy): allow non-unique #localRefs to be defined in a template (#28627)
Prior to this change in Ivy we had strict check that disabled non-unique #localRefs usage within a given template. While this limitation was technically present in View Engine, in many cases View Engine neglected this restriction and as a result, some apps relied on a fact that multiple non-unique #localRefs can be defined and utilized to query elements via @ViewChild(ren) and @ContentChild(ren). In order to provide better compatibility with View Engine, this commit removes existing restriction. As a part of this commit, are few tests were added to verify VE and Ivy compatibility in most common use-cases where multiple non-unique #localRefs were used. PR Close #28627
This commit is contained in:

committed by
Miško Hevery

parent
1e64f37257
commit
a9afe629c7
@ -270,19 +270,15 @@ describe('Query API', () => {
|
||||
});
|
||||
|
||||
describe('read a different token', () => {
|
||||
modifiedInIvy(
|
||||
'Breaking change in Ivy: no longer allow multiple local refs with the same name, all local refs are now unique')
|
||||
.it('should contain all content children', () => {
|
||||
const template =
|
||||
'<needs-content-children-read #q text="ca"><div #q text="cb"></div></needs-content-children-read>';
|
||||
const view = createTestCmpAndDetectChanges(MyComp0, template);
|
||||
it('should contain all content children', () => {
|
||||
const template =
|
||||
'<needs-content-children-read #q text="ca"><div #q text="cb"></div></needs-content-children-read>';
|
||||
const view = createTestCmpAndDetectChanges(MyComp0, template);
|
||||
|
||||
const comp: NeedsContentChildrenWithRead =
|
||||
view.debugElement.children[0].injector.get(NeedsContentChildrenWithRead);
|
||||
expect(comp.textDirChildren.map(textDirective => textDirective.text)).toEqual([
|
||||
'ca', 'cb'
|
||||
]);
|
||||
});
|
||||
const comp: NeedsContentChildrenWithRead =
|
||||
view.debugElement.children[0].injector.get(NeedsContentChildrenWithRead);
|
||||
expect(comp.textDirChildren.map(textDirective => textDirective.text)).toEqual(['ca', 'cb']);
|
||||
});
|
||||
|
||||
it('should contain the first content child', () => {
|
||||
const template =
|
||||
|
Reference in New Issue
Block a user