fix(ivy): change detection strategy not being passed to compiler (#27753)
Fixes the defined change detection strategy not being passed to the compiler when a component is being compiled. PR Close #27753
This commit is contained in:

committed by
Matias Niemelä

parent
4b70a4e905
commit
a833b98fd0
@ -134,10 +134,13 @@ export interface R3ComponentMetadataFacade extends R3DirectiveMetadataFacade {
|
||||
encapsulation: ViewEncapsulation;
|
||||
viewProviders: Provider[]|null;
|
||||
interpolation?: [string, string];
|
||||
changeDetection?: ChangeDetectionStrategy;
|
||||
}
|
||||
|
||||
export type ViewEncapsulation = number;
|
||||
|
||||
export type ChangeDetectionStrategy = number;
|
||||
|
||||
export interface R3QueryMetadataFacade {
|
||||
propertyName: string;
|
||||
first: boolean;
|
||||
|
@ -130,6 +130,7 @@ export class CompilerFacadeImpl implements CompilerFacade {
|
||||
styles: facade.styles || [],
|
||||
encapsulation: facade.encapsulation as any,
|
||||
interpolation: interpolationConfig,
|
||||
changeDetection: facade.changeDetection,
|
||||
animations: facade.animations != null ? new WrappedNodeExpr(facade.animations) : null,
|
||||
viewProviders: facade.viewProviders != null ? new WrappedNodeExpr(facade.viewProviders) :
|
||||
null,
|
||||
|
@ -6,7 +6,7 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
import {ViewEncapsulation} from '../../core';
|
||||
import {ViewEncapsulation, ChangeDetectionStrategy} from '../../core';
|
||||
import {InterpolationConfig} from '../../ml_parser/interpolation_config';
|
||||
import * as o from '../../output/output_ast';
|
||||
import {ParseSourceSpan} from '../../parse_util';
|
||||
@ -184,14 +184,19 @@ export interface R3ComponentMetadata extends R3DirectiveMetadata {
|
||||
|
||||
/**
|
||||
* Whether translation variable name should contain external message id
|
||||
* (used by Closure Compiler's output of `goog.getMsg` for transition period)
|
||||
* (used by Closure Compiler's output of `goog.getMsg` for transition period).
|
||||
*/
|
||||
i18nUseExternalIds: boolean;
|
||||
|
||||
/**
|
||||
* Overrides the default interpolation start and end delimiters ({{ and }})
|
||||
* Overrides the default interpolation start and end delimiters ({{ and }}).
|
||||
*/
|
||||
interpolation: InterpolationConfig;
|
||||
|
||||
/**
|
||||
* Strategy used for detecting changes in the component.
|
||||
*/
|
||||
changeDetection?: ChangeDetectionStrategy;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -251,6 +251,7 @@ export function compileComponentFromMetadata(
|
||||
|
||||
const directivesUsed = new Set<o.Expression>();
|
||||
const pipesUsed = new Set<o.Expression>();
|
||||
const changeDetection = meta.changeDetection;
|
||||
|
||||
const template = meta.template;
|
||||
const templateBuilder = new TemplateDefinitionBuilder(
|
||||
@ -313,6 +314,11 @@ export function compileComponentFromMetadata(
|
||||
'data', o.literalMap([{key: 'animation', value: meta.animations, quoted: false}]));
|
||||
}
|
||||
|
||||
// Only set the change detection flag if it's defined and it's not the default.
|
||||
if (changeDetection != null && changeDetection !== core.ChangeDetectionStrategy.Default) {
|
||||
definitionMap.set('changeDetection', o.literal(changeDetection));
|
||||
}
|
||||
|
||||
// On the type side, remove newlines from the selector as it will need to fit into a TypeScript
|
||||
// string literal, which must be on one line.
|
||||
const selectorForType = (meta.selector || '').replace(/\n/g, '');
|
||||
|
Reference in New Issue
Block a user