fix(ivy): should support components without selector (#27169)
PR Close #27169
This commit is contained in:
@ -358,9 +358,8 @@ function parserSelectorToR3Selector(selector: CssSelector): R3CssSelector {
|
||||
return positive.concat(...negative);
|
||||
}
|
||||
|
||||
export function parseSelectorToR3Selector(selector: string): R3CssSelectorList {
|
||||
const selectors = CssSelector.parse(selector);
|
||||
return selectors.map(parserSelectorToR3Selector);
|
||||
export function parseSelectorToR3Selector(selector: string | null): R3CssSelectorList {
|
||||
return selector ? CssSelector.parse(selector).map(parserSelectorToR3Selector) : [];
|
||||
}
|
||||
|
||||
// Pasted from render3/interfaces/definition since it cannot be referenced directly
|
||||
|
@ -20,9 +20,11 @@ import {R3Reference} from './render3/util';
|
||||
import {R3DirectiveMetadata, R3QueryMetadata} from './render3/view/api';
|
||||
import {compileComponentFromMetadata, compileDirectiveFromMetadata, parseHostBindings} from './render3/view/compiler';
|
||||
import {makeBindingParser, parseTemplate} from './render3/view/template';
|
||||
import {DomElementSchemaRegistry} from './schema/dom_element_schema_registry';
|
||||
|
||||
export class CompilerFacadeImpl implements CompilerFacade {
|
||||
R3ResolvedDependencyType = R3ResolvedDependencyType as any;
|
||||
private elementSchemaRegistry = new DomElementSchemaRegistry();
|
||||
|
||||
compilePipe(angularCoreEnv: CoreEnvironment, sourceMapUrl: string, facade: R3PipeMetadataFacade):
|
||||
any {
|
||||
@ -118,6 +120,7 @@ export class CompilerFacadeImpl implements CompilerFacade {
|
||||
{
|
||||
...facade as R3ComponentMetadataFacadeNoPropAndWhitespace,
|
||||
...convertDirectiveFacadeToMetadata(facade),
|
||||
selector: facade.selector || this.elementSchemaRegistry.getDefaultComponentElementName(),
|
||||
template,
|
||||
viewQueries: facade.viewQueries.map(convertToR3QueryMetadata),
|
||||
wrapDirectivesAndPipesInClosure: false,
|
||||
|
@ -46,7 +46,7 @@ function baseDirectiveFields(
|
||||
definitionMap.set('type', meta.type);
|
||||
|
||||
// e.g. `selectors: [['', 'someDir', '']]`
|
||||
definitionMap.set('selectors', createDirectiveSelector(meta.selector !));
|
||||
definitionMap.set('selectors', createDirectiveSelector(meta.selector));
|
||||
|
||||
|
||||
// e.g. `factory: () => new MyApp(directiveInject(ElementRef))`
|
||||
@ -494,7 +494,7 @@ function createQueryDefinition(
|
||||
}
|
||||
|
||||
// Turn a directive selector into an R3-compatible selector for directive def
|
||||
function createDirectiveSelector(selector: string): o.Expression {
|
||||
function createDirectiveSelector(selector: string | null): o.Expression {
|
||||
return asLiteral(core.parseSelectorToR3Selector(selector));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user