当前位置: 首页 > 知识库问答 >
问题:

通过ComponentFactoryResolver创建组件时更改检测不工作

乌璞瑜
2023-03-14

我有一个组件,用ComponentFactoryResolver创建另一个组件。它似乎工作得很好,我可以通过@input访问数据。问题是在组件启动或数据更改时从不调用ngOnChanges。但是,如果我用HTML中的选择器以正常方式创建组件,它就会触发。但这不是动态的,所以剩下的是ComponentFactoryResolver。这是正常行为吗?

我的父组件有它的输入:

@ViewChild(MyDirective)MyHost:MyDirective;

然后创建子组件,子组件的输入如下所示:

@Input('key') key: String;
@Input('index') index: number;

我创建的组件如下所示:

let item = new Item(ItemDropdownComponent, this.key, 0);
let componentFactory = this._componentFactoryResolver.resolveComponentFactory(item.component);
let viewContainerRef = this.myHost.viewContainerRef;
viewContainerRef.clear();
let componentRef = viewContainerRef.createComponent(componentFactory);
(<ItemInterfaceComponent>componentRef.instance).key = item.key;
(<ItemInterfaceComponent>componentRef.instance).index = item.index;

共有1个答案

滕弘新
2023-03-14

那是意料之中的行为。但是,您可以明确地调用变更检测

componentRef.changeDetectorRef.detectChanges();
 类似资料:
  • 问题内容: 我正在尝试在Python程序中使用一种方法来检测文件系统上的文件是否已被修改。我知道我可以每隔5秒运行一次以检查系统的上次修改日期,但是我很好奇是否有更简便的方法可以执行此操作,而无需我的程序反复检查。 有人知道这种方法吗? 问题答案: 对于linux,有pyinotify。 从首页: Pyinotify是一个用于监视文件系统更改的Python模块。Pyinotify依赖于称为inot

  • 问题内容: 在Angular 1中,通过检查$ scope层次结构来进行更改检测。我们将在模板,控制器或组件中隐式或显式创建观察者。 在Angular 2中,我们不再具有$ scope,但是我们确实覆盖了setInterval,setTimeout等。我可以看到Angular如何使用它来触发$ digest,但是Angular如何确定发生了什么变化,特别是考虑到Object.observe从未进入

  • 我试图设置一个系统,当我按下按钮时,JLabel文本会改变,但我似乎无法使其工作。我已经测试了操作监听器通过执行system.out.println(test);来工作。它工作正常,但是当试图更改JComponent文本时,它不工作。我已经搜索了答案,但没有找到任何有用的答案。 主要类别: JFrame和JPanel类: ActionListener类:

  • 问题内容: 我正在使用Jenkins 1.461,使用SVN轮询时遇到问题。我的存储库URL的格式为svn + ssh:// __ ***。我已将Jenkins配置为每5分钟轮询一次更改。发生的情况是每5分钟检测到更改: 从2012年5月2日开始8:26:24 PM在2012年5月2日8:26:25 PM收到XXXXXXXXX的SCM轮询请求svn + ssh:// XXXX / svn / XX

  • 我试图找出如何检测一些对象属性的变化。所以一开始我就意识到该怎么做,而且很管用。我不知道是否有更好的方法(如果你们知道是否有更好的方法,请告诉我)。 问题是,我还有另一个问题要解决,我不想检测变化,我只想获得属性的新设置值。因此,我知道使用javafx.beans.value.ChangeListener接口可以检测某个属性的每一个更改,这就是我的问题所在,因为我创建了一个实现ChangeList

  • 问题内容: 假设我无法控制iframe中的内容,是否有任何方法可以通过父页面检测到其中的src更改?可能是某种负载? 我的最后一招是如果iframe src与以前的相同,则进行1秒间隔测试,但是这样做会导致问题。 如果有帮助,我正在使用jQuery库。 问题答案: 您可能要使用该事件,如以下示例所示: 只要iframe中的位置发生更改,警报就会弹出。它适用于所有现代浏览器,但可能不适用于某些较旧的