fix(ivy): correctly set TView.firstChild
with runtime i18n (#30920)
`TView.firstChild` was defined as the first node with index 0, but when we use runtime i18n then the instruction `i18nStart` can be the one with index 0 and the first node will be index 1 or more. With this fix we set `TView.firstChild` when we see the first node with index 0 or later if `TView.firstChild` is still null. FW-1367 #resolve PR Close #30920
This commit is contained in:

committed by
Igor Minar

parent
2b9a4cc6a6
commit
4155ed439a
@ -11,6 +11,7 @@ import localeRo from '@angular/common/locales/ro';
|
||||
import {Component, ContentChild, ContentChildren, Directive, HostBinding, Input, LOCALE_ID, QueryList, TemplateRef, Type, ViewChild, ViewContainerRef, ɵi18nConfigureLocalize} from '@angular/core';
|
||||
import {setDelayProjection} from '@angular/core/src/render3/instructions/projection';
|
||||
import {TestBed} from '@angular/core/testing';
|
||||
import {By} from '@angular/platform-browser';
|
||||
import {expect} from '@angular/platform-browser/testing/src/matchers';
|
||||
import {onlyInIvy} from '@angular/private/testing';
|
||||
|
||||
@ -372,6 +373,38 @@ onlyInIvy('Ivy i18n logic').describe('runtime i18n', () => {
|
||||
expect(child).toHaveText('Mon logo');
|
||||
}
|
||||
});
|
||||
|
||||
it('should correctly find context for an element inside i18n section in <ng-template>', () => {
|
||||
@Directive({selector: '[myDir]'})
|
||||
class Dir {
|
||||
condition = true;
|
||||
}
|
||||
|
||||
@Component({
|
||||
selector: 'my-cmp',
|
||||
template: `
|
||||
<div *ngIf="isLogged; else notLoggedIn">
|
||||
<span>Logged in</span>
|
||||
</div>
|
||||
<ng-template #notLoggedIn i18n>
|
||||
<a myDir>Not logged in</a>
|
||||
</ng-template>
|
||||
`,
|
||||
})
|
||||
class Cmp {
|
||||
isLogged = false;
|
||||
}
|
||||
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [Cmp, Dir],
|
||||
});
|
||||
const fixture = TestBed.createComponent(Cmp);
|
||||
fixture.detectChanges();
|
||||
|
||||
const a = fixture.debugElement.query(By.css('a'));
|
||||
const dir = a.injector.get(Dir);
|
||||
expect(dir.condition).toEqual(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('should support ICU expressions', () => {
|
||||
|
Reference in New Issue
Block a user