javascript - Angular 6 +从文档中获取具有类名的元素并更改样式

标签 javascript css angular typescript angular6

我的 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() 方法。但是行 let tabElements = document.getElementsByClassName("tab"); 不返回任何结果。即 tabElements 的长度为 0。因此应用程序将失败,提示“无法读取 null 的属性‘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)

最佳答案

ngOnInit() 中调用 showTab() 意味着它在子项初始化之前被调用。

您需要使用 ngAfterViewInit() 钩子(Hook)。

完整列表component lifecycle hooks .

关于javascript - Angular 6 +从文档中获取具有类名的元素并更改样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54051667/

相关文章:

jquery - 如何为所有 Sprite 图像制作动画?

angular - 如何读取 firebase 推送通知内容并触发 ionic2 中的方法?

javascript - 使多段线与传单中的道路对齐

css - 将自定义 css 添加到自定义模块

css - 更改移动设备上的 Bootstrap 布局

javascript - Angular2 - 删除所有/最近的子组件后无法添加子组件

javascript - 删除不起作用(保存后无法删除数据)

Javascript:过滤二维数组

php - 如何压缩选定的文件以供用户下载?

javascript - 这是一个数组吗? ( react )