angular - 从另一个组件访问一个组件的属性会导致角度未定义的错误
问题描述
我正在尝试从一个组件访问另一个组件的属性。一个组件包含模态另一个是普通视图页面。当我想调用一个从视图页面打开模式的函数时,它会返回一个错误,指出调用的方法未定义。这实际上正在发生,因为模态组件无法创建模态对象并返回未定义。我认为从下面给出的代码中可以更清楚地看到这个场景。
模态 HTML
`
<div *ngIf="isActive" bsModal #createOrEditAuthorModal="bs-modal"
class="modal fade" tabindex="-1" role="dialog"
aria-labelledby="myLargeModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<!--Modal Body-->
</div>
</div>
</div>
`
模态 Ts 文件
`
import { Component, Injector, ViewChild } from '@angular/core';
import { AppComponentBase } from '@shared/app-component-base';
import { ModalDirective } from 'ngx-bootstrap/modal';
@Component({
selector: 'app-create-or-edit-author-modal',
templateUrl: './create-or-edit-author-modal.component.html',
styleUrls: ['./create-or-edit-author-modal.component.less']
})
export class CreateOrEditAuthorModalComponent extends
AppComponentBase {
@ViewChild('createOrEditAuthorModal') public modal:
ModalDirective
constructor(
injector: Injector
) {
super(injector);
}
show(): void {=
this.modal.show();
this.isActive = true;
}
}
`
引用页面 HTML
`
<div [@routerTransition]>
<div>
<section class="content-header">
<div class="container-fluid">
<div class="row">
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 col-xl-
6">
<h1>{{ l('Authors') }}</h1>
</div>
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 col-xl-6
pull-right">
<button type="button" class="btn btn-sm btn-primary"
(click)="createNewAuthor()">
<i class="fa fa-plus" aria-hidden="true">
{{l('CreateAuthor')}}</i>
</button>
</div>
</div>
</div>
</section>
<!-- Create or Edit New Book -->
<app-create-or-edit-author-modal #createOrEditAuthor></app-
create-or-edit-author-modal>
</div>
</div>
`
参考页面 TS
`
import { Component, Injector, ViewChild } from '@angular/core';
import { appModuleAnimation } from
'@shared/animations/routerTransition';
import { AppComponentBase } from '@shared/app-component-base';
@Component({
selector: 'app-authors',
templateUrl: './authors.component.html',
styleUrls: ['./authors.component.less'],
animations: [appModuleAnimation()]
})
export class AuthorsComponent extends AppComponentBase implements{
@ViewChild('createOrEditAuthor', { static: true })
createOrEditAuthor: CreateOrEditAuthorModalComponent
constructor(
injector: Injector
) {
super(injector);
}
createNewAuthor(): void {
this.createOrEditAuthor.show();
}
}
`
在模态 Ts文件中,如果我modal
在 中打印对象ngAfterViewInit()
,则打印未定义。
我认为引用页面在其视图初始化之前初始化了模态页面的对象。
解决方案
ngIf
在模态 HTML 中导致了问题。删除它后,模态工作正常
推荐阅读
- tensorflow - 全连接前后的多个Lstm
- exception - int() 不会在 try 块语句中将浮点数更改为整数
- java - 通过对象在静态方法上使用非静态变量?爪哇
- c++ - c ++中奇怪的for循环语法
- python - 行间隔的滚动差异
- java - dom4j - 我想在处理指令后消除空行
- javascript - 尝试在发票中添加 5% 的固定增值税(税)
- .htaccess - 如何为包含不在末尾但在斜杠之间的文件名的 url 页面进行内部重定向
- javascript - 添加表情符号后的Jquery焦点光标
- python - Google App Engine Flask 413 请求实体太大错误