首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角9:如何重新渲染组件

角9:如何重新渲染组件
EN

Stack Overflow用户
提问于 2020-06-02 21:56:47
回答 4查看 12.4K关注 0票数 7

我有一个家长和一个孩子。如果子组件在内部更新其值,则无法从父组件更新值。

参见Stackblitz:https://stackblitz.com/edit/angular-ivy-tynepp中的示例。当子组件失去焦点时,我会触发一个事件,并且父组件重置子组件的值。但我认为,因为父级的"this.value“没有改变,所以更新不会触发子节点中的检测更改。

我怎样才能解决这个难题呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-06-03 00:23:27

如前所述,由于绑定值没有更改,因此不会触发更改检测。可以强制使用以下步骤更新数据绑定:

  1. 设置临时值
  2. 调用ChangeDetectorRef.detectChanges()
  3. 重置值
代码语言:javascript
复制
constructor(private changeDetectorRef: ChangeDetectorRef) {}

resetValue() {
  this.value = "____TempValue____";
  this.changeDetectorRef.detectChanges();
  this.value = "";
}

有关演示,请参见这一堆闪电战

票数 12
EN

Stack Overflow用户

发布于 2021-08-05 09:02:32

我为我的项目创建了一个指令,它非常容易使用

代码语言:javascript
复制
<ng-container *rerender='changingInput'>
  this content will be re-rendered everytime `changingInput` changes
</ng-container>

有关更多细节,请查看我的要旨

票数 3
EN

Stack Overflow用户

发布于 2020-06-03 01:08:48

另一种更简单的方法是使用模板变量,如下面的示例所示:

parent.component.html

代码语言:javascript
复制
<app-my-child 
  #child
  (lostFocus)="child.value = ''"></app-my-child>

解决方案可用的这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62162006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档