【发布时间】:2019-08-29 20:30:59
【问题描述】:
好的,首先,我已经疯狂地搜索了这个问题,并找到了一些解决方案(一些在此处进行了解释),但它们都没有解释一种有效的方法来做到这一点。所以,我来了……
这是关于什么的
我正在创建一个使用 ng-bootstrap 的模式。我制作了一个表单组件以在其他页面中重新使用它。我把这个组件放在模态里。我需要从Parent 中获取这个组件的变量和方法,所以我在Parent 的组件中设置了一个ViewChild 变量并将其设置为Child Component。
当我打开模式时,组件显示没有问题。当我单击“创建”按钮时,问题就来了。当用户单击“创建”按钮时,父级(包含模式)执行子级的方法来发送表单,但父级无法访问子级的方法,因为它未定义,即使模式已经打开。
我已经尝试过的
我尝试将 Child 组件放在 ng-template 之外,它工作得很好,但我需要它在模态中。
我还尝试将指令上带有#id 的组件传递给父方法,以便执行子方法。它可以工作,但会使代码更脏,并在未来带来更多问题。 (这实际上是我自己在这个实现中遇到了更多问题的未来。)
如果有人想知道它会带来什么样的问题,我需要将更多的组件嵌套到子组件中,因为这个“孙子”组件仍在 ng-template 中,问题重复出现,现在我必须编写代码又脏了……
代码(Stackblitz 应用程序)
这是我制作的 Stackblitz 应用程序。我保持它非常简单,并排除了与问题无关的不必要的代码部分。 Stackblitz App
我收到的消息错误
这是我收到的错误消息:
ERROR TypeError: Cannot read property 'sendClassForm' of undefined
我读过当 ng-template 还没有被渲染时(比如模态还没有打开)你会得到这个undefined 错误,但我不明白为什么它已经打开时仍然发生。
Angular 版本:8.1.2
"@ng-bootstrap/ng-bootstrap": "^5.1.0"
【问题讨论】:
标签: angular undefined-behavior ng-bootstrap viewchild ng-template