Revert "fix(elements): do not break when the constructor of an Angular Element is not called (#36114)"
This reverts commit 87b9f08d3bc186143650522c703009056ee0ddd7 because it is causing the side effects test to break on the 9.1.x branch.
This commit is contained in:
parent
94fc8463cc
commit
12d8af50dd
@ -144,9 +144,8 @@ export function createCustomElement<P>(
|
||||
//
|
||||
// TODO(andrewseguin): Add e2e tests that cover cases where the constructor isn't called. For
|
||||
// now this is tested using a Google internal test suite.
|
||||
if (!this._ngElementStrategy) {
|
||||
const strategy = this._ngElementStrategy =
|
||||
strategyFactory.create(this.injector || config.injector);
|
||||
if (this._ngElementStrategy === null) {
|
||||
const strategy = this._ngElementStrategy = strategyFactory.create(this.injector);
|
||||
|
||||
// Collect pre-existing values on the element to re-apply through the strategy.
|
||||
const preExistingValues =
|
||||
@ -174,10 +173,12 @@ export function createCustomElement<P>(
|
||||
return this._ngElementStrategy!;
|
||||
}
|
||||
|
||||
private _ngElementStrategy?: NgElementStrategy;
|
||||
private readonly injector: Injector;
|
||||
private _ngElementStrategy: NgElementStrategy|null = null;
|
||||
|
||||
constructor(private readonly injector?: Injector) {
|
||||
constructor(injector?: Injector) {
|
||||
super();
|
||||
this.injector = injector || config.injector;
|
||||
}
|
||||
|
||||
attributeChangedCallback(
|
||||
|
@ -73,26 +73,6 @@ if (browserDetection.supportsCustomElements) {
|
||||
expect(strategy.getInputValue('barBar')).toBe('value-barbar');
|
||||
});
|
||||
|
||||
it('should work even if when the constructor is not called (due to polyfill)', () => {
|
||||
// Some polyfills (e.g. `document-register-element`) do not call the constructor of custom
|
||||
// elements. Currently, all the constructor does is initialize the `injector` property. This
|
||||
// test simulates not having called the constructor by "unsetting" the property.
|
||||
//
|
||||
// NOTE:
|
||||
// If the constructor implementation changes in the future, this test needs to be adjusted
|
||||
// accordingly.
|
||||
const element = new NgElementCtor(injector);
|
||||
delete (element as any).injector;
|
||||
|
||||
element.setAttribute('foo-foo', 'value-foo-foo');
|
||||
element.setAttribute('barbar', 'value-barbar');
|
||||
element.connectedCallback();
|
||||
|
||||
expect(strategy.connectedElement).toBe(element);
|
||||
expect(strategy.getInputValue('fooFoo')).toBe('value-foo-foo');
|
||||
expect(strategy.getInputValue('barBar')).toBe('value-barbar');
|
||||
});
|
||||
|
||||
it('should listen to output events after connected', () => {
|
||||
const element = new NgElementCtor(injector);
|
||||
element.connectedCallback();
|
||||
@ -280,14 +260,7 @@ if (browserDetection.supportsCustomElements) {
|
||||
class TestStrategyFactory implements NgElementStrategyFactory {
|
||||
testStrategy = new TestStrategy();
|
||||
|
||||
create(injector: Injector): NgElementStrategy {
|
||||
// Although not used by the `TestStrategy`, verify that the injector is provided.
|
||||
if (!injector) {
|
||||
throw new Error(
|
||||
'Expected injector to be passed to `TestStrategyFactory#create()`, but received ' +
|
||||
`value of type ${typeof injector}: ${injector}`);
|
||||
}
|
||||
|
||||
create(): NgElementStrategy {
|
||||
return this.testStrategy;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user