【发布时间】:2019-05-16 12:49:33
【问题描述】:
我有两个材质对话框组件。一个是父级,在这一个中通过按一个按钮打开第二个。第二个是孩子,基本上是一种形式。通过提交此表单,我创建了一个应该发送到父组件的对象。我一直在尝试使用 @Output 装饰器并取得了一定的成功。考虑到我只是提供共享数据所需的代码,这两个组件都复杂得多。
子组件
@Component({
selector: "wrapper-add-dev",
templateUrl: "./wrapper-add-dev.html",
styleUrls: ["./wrapper-add-dev.css"],
providers: [DevizeService, ConfigService]
})
export class WrapperAddDevComponent implements OnInit {
@Output() wrapperOutput= new EventEmitter();
/**CODE THAT RETRIEVES THE REACTIVE FORM VALUE**/
///devize is the object i want to emit
addWrapperToMetaDevize(devize) {
this.wrapperOutput.emit(devize);
}
}
父组件
@Component({
selector: 'metadevize-add',
templateUrl: './metadevize-add.html',
styleUrls: ['./metadevize-add.css']
})
export class MetaDevizeAddComponent implements OnInit {
showWrapper(event){
//printing the device into the console
console.log(event);
}
}
父 HTML
<wrapper-add-dev (wrapperOutput)="showWrapper($event)"> </wrapper-add-dev>
结果是子表单被渲染到父模板中,devize 对象被打印出来。因此,如果我想填写表格,我需要在父母的模板中填写,因为孩子的模板没有正确呈现。
最终目标是能够在不渲染子模板的情况下使用父脚本中的对象。在线所有示例都旨在在父模板中呈现消息,这不是我真正想要实现的。老实说,我发现这种使用 html 和 typescript 共享数据的方式非常令人困惑。
我也尝试过使用 Save/Fetch 共享服务,但无济于事。
【问题讨论】:
-
为什么不尝试使用 ngxs 或 ngrx 并将对象存储在状态中?
-
不知道这是一个选项。谢谢,我会调查的。
标签: angular typescript angular-material