我试图使用自定义元素 + NgRX 并尝试将自定义元素集成到 angularjs 应用程序中。每当从我的 angularjs 应用程序中调用自定义元素暴露方法更改检测时,都不会发生。
在 Angular js 中调用代码
const customElement= angular.element('hello-ce')[0];
customElement.refreshSettingProgressValue(settingsPage);
Angular 7 + @ngrx/store + 自定义元素中的公开方法:
ngOnInit(): void {
this.isLoading$ = this.store.pipe(select(landingPageQuery.getLoading));
this.categories$ = this.store.pipe(
select(landingPageQuery.getAllLandingPage)
);
}
@Input()
public refreshSettingProgressValue = function (this: CompType, settingCategoryCode: string) {
this.categories$.pipe(
mergeMap(categories => categories),
map(category => category.settings),
mergeMap(settings => settings),
filter(setting => setting.settingCodeType.code === settingCategoryCode),
take(1)
).subscribe({
next: (setting) => {
this.store.dispatch(new ResetSettingsProgressValue(setting));
this.store.dispatch(new LoadSettingsProgressValue(setting));
}
})
}.bind(this);
我尝试通过单击虚拟按钮在 Angular7 应用程序中调用 _refreshSettingProgressValue _ 并且一切正常,但是当我在 Angular 上下文之外调用它时,我无法看到 UI 中的更改。PS LoadSettingsProgressValue在我们调用一些 api 的地方有效果。我看到调用也在发生,reducer 也在更新状态,但更改检测似乎没有启动。
我已经尝试过ngzone-element-strtergy但它没有解决我的问题
ngDoBootstrap(): void {
const elements: any[] = [
[HelloWorldComponent, 'hello-ce'],
];
for (const [component, name] of elements) {
const strategyFactory = new ElementZoneStrategyFactory(component, this.injector);
const el = createCustomElement(component, { injector: this.injector, strategyFactory });
customElements.define(name, el);
}
}
我相信我们可以明确地调用changeDetection,但是使用ngrx我们如何以及在哪里可以做到这一点?
谢谢