angular/integration/ng_elements/src/elements.ts
George Kalpakas bdce7698fc fix(elements): update the view of an OnPush component when inputs change (#39452)
As with regular Angular components, Angular elements are expected to
have their views update when inputs change.

Previously, Angular Elements views were not updated if the underlying
component used the `OnPush` change detection strategy.

This commit fixes this by calling `markForCheck()` on the component
view's `ChangeDetectorRef`.

NOTE:
This is similar to how `@angular/upgrade` does it:
3236ae0ee1/packages/upgrade/src/common/src/downgrade_component_adapter.ts (L146).

Fixes #38948

PR Close #39452
2020-11-06 09:31:46 -08:00

42 lines
954 B
TypeScript

import {ChangeDetectionStrategy, Component, Input, ViewEncapsulation} from '@angular/core';
@Component({
selector: 'hello-world-el',
template: 'Hello {{name}}!',
})
export class HelloWorldComponent {
@Input() name: string = 'World';
}
@Component({
selector: 'hello-world-onpush-el',
template: 'Hello {{name}}!',
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class HelloWorldOnpushComponent {
@Input() name: string = 'World';
}
@Component({
selector: 'hello-world-shadow-el',
template: 'Hello {{name}}!',
encapsulation: ViewEncapsulation.ShadowDom,
})
export class HelloWorldShadowComponent {
@Input() name: string = 'World';
}
@Component({
selector: 'test-card',
template: `
<header>
<slot name="card-header"></slot>
</header>
<slot></slot>
<footer>
<slot name="card-footer"></slot>
</footer>`,
encapsulation: ViewEncapsulation.ShadowDom,
})
export class TestCardComponent {
}