fix(ivy): verify Host Bindings and Host Listeners before compiling them (#28356)
Prior to this change we may encounter some errors (like pipes being used where they should not be used) while compiling Host Bindings and Listeners. With this update we move validation logic to the analyze phase and throw an error if something is wrong. This also aligns error messages between Ivy and VE. PR Close #28356
This commit is contained in:

committed by
Jason Aden

parent
ad499628cb
commit
76cedb8bf3
@ -827,6 +827,44 @@ describe('ngtsc behavioral tests', () => {
|
||||
`Unexpected global target 'UnknownTarget' defined for 'click' event. Supported list of global targets: window,document,body.`);
|
||||
});
|
||||
|
||||
it('should throw in case pipes are used in host listeners', () => {
|
||||
env.tsconfig();
|
||||
env.write(`test.ts`, `
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'test',
|
||||
template: '...',
|
||||
host: {
|
||||
'(click)': 'doSmth() | myPipe'
|
||||
}
|
||||
})
|
||||
class FooCmp {}
|
||||
`);
|
||||
const errors = env.driveDiagnostics();
|
||||
expect(trim(errors[0].messageText as string))
|
||||
.toContain('Cannot have a pipe in an action expression');
|
||||
});
|
||||
|
||||
it('should throw in case pipes are used in host listeners', () => {
|
||||
env.tsconfig();
|
||||
env.write(`test.ts`, `
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'test',
|
||||
template: '...',
|
||||
host: {
|
||||
'[id]': 'id | myPipe'
|
||||
}
|
||||
})
|
||||
class FooCmp {}
|
||||
`);
|
||||
const errors = env.driveDiagnostics();
|
||||
expect(trim(errors[0].messageText as string))
|
||||
.toContain('Host binding expression cannot contain pipes');
|
||||
});
|
||||
|
||||
it('should generate host bindings for directives', () => {
|
||||
env.tsconfig();
|
||||
env.write(`test.ts`, `
|
||||
|
Reference in New Issue
Block a user