我的HTML页面中有一组“标签”。它们不过是带有类名“tab”的“div”。我的意图是一次显示一个标签,然后使用“下一个”和“上一个”按钮访问其他标签。 HTML代码如下所示。
<div class="container">
<div *ngFor="let question of questionList;let i = index" class="questionBox tab">
{{question.question.query}}
<br>
<div *ngFor="let option of question.options">
<input type="radio" value="{{option.id}}" name="radio_{{i}}" [(ngModel)]="question.selected.id">{{option.text}}
<br>
</div>
{{question.selected | json}}
<br>
<br>
<!--TO DO -->
<input type="button" class="btn btn-primary" value="Previous">
<!--TO DO -->
<input type="button" class="btn btn-primary nxtButton" value="Next">
</div>
<input type="button" class="btn btn-success btn-block" value="Submit">
</div>
最初,所有选项卡都使用CSS隐藏。
.tab{
display: none;
}
在页面初始化时,必须显示第一个选项卡,其余的都被隐藏。
组件类中的 showTab()方法专门用于此目的。 shotTab方法接受一个“数字”,该数字表示要显示的选项卡的索引。
public showTab(n: number){
let tabElements = document.getElementsByClassName("tab");
let tabToDisplay = tabElements.item(n) as HTMLElement;
tabToDisplay.style.display="block";
}
要显示第一个选项卡,请从组件的 ngOnInit()方法中调用showTab()方法。但行让tabElements = document.getElementsByClassName(“tab”); 不返回任何结果。即 tabElements 的长度为0。因此应用程序将失败,提示“无法读取空的属性'style'”。
AppComponent_Host.ngfactory.js? [sm]:1 ERROR TypeError: Cannot read property 'style' of null
at AppComponent.push../src/app/app.component.ts.AppComponent.showTab (app.component.ts:25)
at AppComponent.push../src/app/app.component.ts.AppComponent.ngOnInit (app.component.ts:18)
at checkAndUpdateDirectiveInline (core.js:9243)
at checkAndUpdateNodeInline (core.js:10507)
at checkAndUpdateNode (core.js:10469)
at debugCheckAndUpdateNode (core.js:11102)
at debugCheckDirectivesFn (core.js:11062)
at Object.eval [as updateDirectives] (AppComponent_Host.ngfactory.js? [sm]:1)
at Object.debugUpdateDirectives [as updateDirectives] (core.js:11054)
at checkAndUpdateView (core.js:10451)
最佳答案
在showTab()
中调用ngOnInit()
意味着它在子代初始化之前被调用。
您需要使用ngAfterViewInit()
钩子(Hook)。
component lifecycle hooks的完整列表。