Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度:无法读取属性';sendClassForm';NgbModal的ng模板中未定义的_Angular_Undefined Behavior_Ng Bootstrap_Viewchild_Ng Template - Fatal编程技术网

Angular 角度:无法读取属性';sendClassForm';NgbModal的ng模板中未定义的

Angular 角度:无法读取属性';sendClassForm';NgbModal的ng模板中未定义的,angular,undefined-behavior,ng-bootstrap,viewchild,ng-template,Angular,Undefined Behavior,Ng Bootstrap,Viewchild,Ng Template,好的,首先,我已经疯狂地搜索了这个问题,并找到了一些解决方案(这里解释了一些),但是没有一个能有效地解决这个问题。所以,我来了 这是怎么回事 我正在创建一个使用ng引导的模式。我制作了表单的一个组件,以便在其他页面中重新使用它。我把这个组件放在模态中。我需要从父组件访问此组件的变量和方法,因此我在父组件中设置了ViewChild变量并将其设置为子组件 当我打开模态时,组件显示没有问题。当我点击创建按钮时,问题就出现了。当用户单击“创建”按钮时,父对象(包含模式)执行子对象的方法来发送表单,但父对

好的,首先,我已经疯狂地搜索了这个问题,并找到了一些解决方案(这里解释了一些),但是没有一个能有效地解决这个问题。所以,我来了

这是怎么回事 我正在创建一个使用ng引导的模式。我制作了表单的一个组件,以便在其他页面中重新使用它。我把这个组件放在模态中。我需要从父组件访问此组件的变量和方法,因此我在父组件中设置了ViewChild变量并将其设置为子组件

当我打开模态时,组件显示没有问题。当我点击创建按钮时,问题就出现了。当用户单击“创建”按钮时,父对象(包含模式)执行子对象的方法来发送表单,但父对象无法访问子对象的方法,因为它未定义,即使模式已打开

我已经试过了 我试着将子组件放在ng模板之外,它工作得很好,但我需要在模态中使用它

我还尝试将指令上带有#id的组件传递给父方法,以便执行子方法。它可以工作,但会使代码更脏,并在将来带来更多问题。(这实际上是我自己的未来,在这个实现中遇到了更多的问题。)

如果有人想知道它会带来什么样的问题,我需要在子组件中嵌套更多的组件,因为这个“孙子”组件仍然在ng模板中,问题会重复出现,现在我必须再次使代码更脏

代码(Stackblitz应用程序) 这是我制作的Stackblitz应用程序。我保持它相当简单,并排除了代码中与问题无关的不必要部分。

我收到的消息是错误的 这是我收到的错误消息:

错误类型错误:无法读取未定义的属性“sendClassForm”

我已经读到当ng模板还没有被呈现时(比如模态还没有被打开),你会得到这个
未定义的
错误,但是我不明白为什么它已经被打开时仍然会发生

角度版本:8.1.2


NootBotstrap /NG引导程序:“^ 5.1.0”

由于“YurZUI”坚持自己的解决方案,我想出了另一个解决方案,我认为与VIEWKITY几乎相同,但没有问题。 这是Stackblitz代码,以防你想直接看到它,而不是我的解释

父组件 我设置了一个属性,与ViewChild相同,但删除了ViewChild零件

classFormComponent: ClassFormComponent; // No 'ViewChild(...)' part
并且还创建了一个方法,以便在需要时将子组件的引用保存到上面的变量

// This method will be called by the ClassFormComponent when it gets ready to be used by the Parent.
saveReference( classFormComponent: ClassFormComponent ) {
    this.classFormComponent = classFormComponent;
}
父HTML 然后,我将侦听器设置为
应用程序类表单
,这样当孩子准备好时,它可以通过调用上面解释的家长方法来告诉家长

<app-class-form (componentIsReady)="saveReference( $event )"></app-class-form>
这样,父对象就可以访问子对象的方法和属性

我说这是一个与我之前的相反的解决方案,因为现在孩子在准备好的时候到达了父母,只有到那时,父母才保存对它的引用

@Output() componentIsReady: EventEmitter<ClassFormComponent> = new EventEmitter();`
ngOnInit() {

    // At this point, child component is born and it's ready to be used by the parent.
    this.componentIsReady.emit(this);
}