如何在不显式使用事件的情况下将值从子组件传递到父组件?

时间:2016-11-12 17:17:57

标签: angular

假设我有两个组件,即父A和嵌套子B。我想将aVal的{​​{1}}字段绑定到A的{​​{1}}字段,以便bVal设置为B的值{ {1}}值变化。我知道我可以使用aVal并在bVal更改时发出事件但我不想明确关心事件,我只想要简单的值绑定。它甚至可能吗?

父组件:

bVal

子组件:

EventEmitter

我认为绑定可能看起来像bVal但它不起作用。

更新

我决定我能做的最好的事情如下。这很清楚,让我忽略尽可能多地处理事件。

父组件:

import {Component, Output} from "@angular/core";

@Component({
  selector: 'a',
  template: '<b></b>'
})
export class A {
  @Output() aVal: string;
}

子组件:

import {Component, Output} from "@angular/core";

@Component({
  selector: 'b',
  template: '<input [(ngModel)]="bVal"/>'
})
export class B {
  @Output() bVal: string;
}

2 个答案:

答案 0 :(得分:2)

某种类型的服务(工厂有意义)可以注入两个组件,然后绑定到组件变量。这是一个昂贵的解决方案,但据我所知,Angular2以这种方式构建,以防止一个模块/组件中的数据到达其他模块/组件中的数据。这是为了安全并确保组件之间的意外通信不会发生。

此外,Output()装饰器可用于发出附加了所需值的事件。这是一个concise example

答案 1 :(得分:0)

在A中使aVal成员(不是输出)

aVal: string;

在B中制作bVal并输入:

@Input() bVal: string;

应该这样做。

顺便说一下,(bVal)="aVal"无效。 (someChangeOutput) =&#34;处理程序($ event)&#34;`需要一个处理程序,而不是一个成员/值