この問題についていくつか調査しましたが、これがバグなのか実装に問題があるのか はわかりません。
サービスを使用してデータをフェッチする要素があり、そのデータを子要素に渡しますが、データを更新するとエラーが発生します。
親要素
import { Component, OnInit, ViewEncapsulation} from '@angular/core';
import { TestService } from '../services/test.service';
@Component({
selector: 'dm-element-with-service-test',
templateUrl: './element-with-service-test.component.html',
encapsulation: ViewEncapsulation.Emulated
})
export class ElementWithServiceTestComponent implements OnInit {
currentCount: number;
constructor(private testService: TestService) { }
ngOnInit() {
this.testService.count.subscribe(count => this.currentCount = count);
}
count() {
this.testService.addCount();
}
}
親要素ビュー
<div>
<button (click)="count()">count</button>
<element-test [myNumber]="currentCount"></element-test>
</div>
子要素
import { Component, OnInit, ViewEncapsulation, Input } from '@angular/core';
@Component({
selector: 'dm-element-test',
templateUrl: './element-test.component.html',
encapsulation: ViewEncapsulation.Emulated
})
export class ElementTestComponent implements OnInit {
@Input() myNumber: number;
constructor() { }
ngOnInit() {
// do stuff...
}
}
子要素ビュー
<p>
current number in this component: {{myNumber}}
</p>
アプリ モジュール
import { BrowserModule } from '@angular/platform-browser';
import { NgModule, Injector, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { AppComponent } from './app.component';
import { ElementTestComponent } from './element-test/element-test.component';
import { createCustomElement } from '@angular/elements';
import { ElementWithServiceTestComponent } from './element-with-service-test/element-with-service-test.component';
@NgModule({
declarations: [
AppComponent,
ElementTestComponent,
ElementWithServiceTestComponent
],
imports: [
BrowserModule
],
providers: [],
schemas: [CUSTOM_ELEMENTS_SCHEMA ],
entryComponents: [ElementTestComponent, ElementWithServiceTestComponent]
})
export class AppModule {
constructor(private injector: Injector) {
const el = createCustomElement(ElementTestComponent, { injector });
const el2 = createCustomElement(ElementWithServiceTestComponent, { injector });
customElements.define('element-test', el);
customElements.define('element-with-service-test', el2);
}
ngDoBootstrap() { }
}
索引
<div class="tests">
<element-with-service-test></element-with-service-test>
</div>
アプリをロードすると、すべて問題ありませんが、カウント ボタンをクリックすると、そのエラーが発生します。