【问题标题】:Update input value in child even when it stays unchanged in parent angular 2+即使在父角度2+中保持不变,也更新子输入值
【发布时间】:2018-07-13 04:13:06
【问题描述】:

我正在像这样将一个值传递给一个子组件..

<app-child-component[prop1]='prop1'></app-child-component>

并像这样在孩子身上抓住它..

 @Input() prop1:boolean;

这是一个布尔值,当按下按钮时,它会在父级中从 false 变为 true。在子项中,当单击另一个按钮时,它会变回 false。

此时,如果我再次按下父级中的按钮,则没有任何反应。 prop1 的值在父级中仍然为真,因此不会检测到任何更改,也不会向子级发送任何内容。我了解这是预期行为。

有没有办法仍然强制将 prop1 的值再次推送给孩子?

编辑:在这种情况下我可能需要双向数据绑定,但由于我实际上并没有在父级中使用 prop1 的值,因此在子级中再次更新它的能力就足够了。

【问题讨论】:

  • 你需要在 Angular 中使用两种方式绑定来做到这一点,看看angular-2-training-book.rangle.io/handout/components/…
  • @ArunGopinathan 请参阅编辑说明。 2路数据绑定可能是要走的路,但如果有另一种方法来实现我正在寻找的东西,在这种情况下我真的不需要它。
  • 看看this answer。您可以使用Subject 通知子组件单击了父组件的按钮。

标签: angular


【解决方案1】:

好的,找到了一种没有 2 路数据绑定的方法..

在父..

<button type="button" (click)="prop1=!prop1">...</button>
<app-child-component [setProp]='prop1'></app-child-component>

在孩子身上..

prop1:boolean;
  @Input()
  set setProp(p: boolean) {
    this.prop1 = true;
}

因此,每次我单击父级中的按钮时,值都会更改并每次都发送给子级。而且由于在父级中单击按钮始终意味着该值在子级中需要为真,这就是我在 set 函数中所做的。

编辑:用例是一个模态对话框,模态对话框位于子组件中。 Parent 有打开 modal 的按钮,modal 有一个关闭按钮。

【讨论】:

  • 这能回答问题吗?您在标题中指出父项中的值不会改变。
  • 我可能需要改写我的问题。我正在尝试从父级发送按钮单击。父母的价值并不重要
  • 你可能想回答this question,它正好涉及这个主题。
【解决方案2】:

您必须将值从 chld 发送到父级,所以是的 2 路绑定

在孩子中

  @Output() booleanEmitter= new EventEmitter();

onButtonClick(){
    this.booleanEmitter.emit(this.prop1);
}

在父母中

<app-child-component (booleanEmitter)="getProp($event)"  [prop1]='prop1'></app-child-component>

getProp($event){
this.prop = $event as boolean
}

【讨论】:

  • 感谢 2 路数据绑定示例。如果找不到其他方法,我将使用它。当我没有真正使用父级中的数据时,使用 2 路数据绑定感觉不对。
  • 那么你就可以使用服务了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多