首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果在*ngIf内,则未使用@ViewChild和ngAfterViewInit初始化MatSort和MatPaginator

在*ngIf内使用MatSort和MatPaginator时,由于元素在DOM中可能尚未渲染,因此无法直接使用@ViewChild和ngAfterViewInit来初始化它们。解决这个问题的一种方法是使用ngAfterContentChecked生命周期钩子来手动初始化MatSort和MatPaginator。

首先,在组件类中引入ViewChild和AfterContentChecked装饰器:

代码语言:txt
复制
import { Component, ViewChild, AfterContentChecked } from '@angular/core';
import { MatSort, MatPaginator } from '@angular/material';

@Component({
  ...
})
export class YourComponent implements AfterContentChecked {
  @ViewChild(MatSort) sort: MatSort;
  @ViewChild(MatPaginator) paginator: MatPaginator;

  ngAfterContentChecked() {
    if (this.sort && this.paginator) {
      // 初始化MatSort和MatPaginator
      this.dataSource.sort = this.sort;
      this.dataSource.paginator = this.paginator;
    }
  }
}

然后,在模板中使用*ngIf来控制元素的显示和隐藏:

代码语言:txt
复制
<div *ngIf="condition">
  <!-- 在这里使用MatSort和MatPaginator -->
  <table mat-table [dataSource]="dataSource" matSort matSortActive="column" matSortDirection="asc">
    <!-- 表格内容 -->
  </table>
  <mat-paginator [pageSizeOptions]="[5, 10, 25]" showFirstLastButtons></mat-paginator>
</div>

在上述代码中,我们在组件类中定义了sort和paginator的ViewChild,并在ngAfterContentChecked生命周期钩子中手动初始化它们。在模板中,我们使用*ngIf来控制元素的显示和隐藏,确保元素在DOM中已经渲染后再进行初始化。

这样,当*ngIf条件为true时,MatSort和MatPaginator将被正确地初始化,并与数据源进行绑定,实现排序和分页功能。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动应用开发平台(MADP):https://cloud.tencent.com/product/madp
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯区块链服务(TBCS):https://cloud.tencent.com/product/tbcs
  • 腾讯云元宇宙(Tencent Cloud Metaverse):https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Angular教程】-内容投影u002F@ContentChildu002F@ViewChild

---- 前言 这一篇我们带来的是关于组件基础使用的最后一块,内容投影Vue中的插槽很类似,在组件封装的时候非常有用,我们一起来体验一下。 正文 1....在这种情况下,不建议使用 ng-content 元素,因为只要组件的使用者提供了内容,即使该组件从未定义 ng-content 元素或该 ng-content 元素位于 ngIf 语句的内部,该内容也总会被初始化...使用ng-container定义我们的投影区块 使用ngTemplateOutlet指令来渲染ng-template元素。 通过内置的动态指令*ngIf来控制是否渲染投影。...: ContentDirective; } 通过日志可以看到我们在切换容器组件的expanded标识时,只有开启状态my-hello组件才会初始化,下面的这个ngIf虽然在页面看不到渲染的内容,但组件实实在在被初始化过了...@ViewChild & @ViewChildren 使用这两个装饰器来对指接子组件进行操作 使用注解在业务组件中定义子组件 @ViewChild(HelloWorldComp) helloComp

52830

AngularDart 4.0 高级-生命周期钩子 顶

在ngAfterContentInit后续的每次NgDoCheck之后调用。 组件独有的钩子。 ngAfterViewInit 在Angular初始化组件的视图子视图之后进行响应,。...ngAfterViewChecked 在Angular检查组件的视图子视图之后作出响应。 在ngAfterViewInit后续的每次ngAfterContentChecked之后调用。...演示ngAfterViewInitngAfterViewChecked挂钩。 AfterContent 演示如何将外部内容投影到组件中,以及如何区分组件的视图中的投影内容子组件。...刺探OnInitOnDestroy 使用这两个间谍钩进行卧底探索,以发现元素何时被初始化或销毁。 这是指令的完美渗透工作。 英雄们永远不会知道他们正在被监视。...(ChildViewComponent) ChildViewComponent viewChild; ngAfterViewInit() { // viewChild is set after

6.2K10

高级 Angular 组件模式 (5)

目标 在视图模板,获取一个指令的引用。 实现 模板引用变量是获取某个元素、组件或者指令引用的一种方式,这个引用可以在当前的视图模板中的任何地方使用。...Note: 请注意作用域的问题,如果你使用或者是一个结构性指令,比如*ngIf或者*ngFor,它会在这个模板上创建一个新的作用域,之后在其内部声明的模板引用变量无法在该模板作用域以外使用...在类内部获取模板引用变量所指向的引用是通过使用ViewChild装饰器完成的,比如上述文章中的第二个例子: @Component({ selector: 'my-app', template:...; ngAfterViewInit() { console.log(this.myDiv); } } 这里的myDiv即指向当前模板引用变量所指向的html元素。...Note: 在类中获取模板引用变量所指向的引用时,请格外注意你期望获取的引用类型,在例子中,我们期望获取html元素,因此这里的引用类型是ElementRef,如果是指令或者组件,分别要对应其类型的Type

63120

【Appetite】ionic3实录(七)次页实现及分析解决问题【下】

问题二:为什么用[hidden],不用*ngIf或者ngSwitch? 因为前者只是隐藏,而后两者是会移除。...也就是说,前者只会初始化一次,而后两者每次显示都需要重新初始化,进一步说,若使用后两者方式,对于这里用到的swiper,它不是一个angular封装起来的组件,不会自动初始化,我们每次显示它时都需要显式调用一下...是的,在大多场景中可以直接用ion-slides,只是会有个别坑要解决,比如我们改动下tshtml文件。...数据正确应用 对比上一节的实际效果图,会发现这里只显示了两个图片,什么原因呢?...是因为该组件在异步获取到数据this.vm.dessertSlides前已完成了初始化了,这样新数据其实没有应用到,为了处理这种情况,我们改造一下html,为ion-slides组件加上一段*ngIf=

1.4K20

angular面试题及答案_angular面试

:在angular初始化组件及其子组件的视图之后调用,只调用一次,只适用于组件 ngAfterViewChecked:每次做完组件视图子视图的变更检测之后调用,只适用于组件 ngOnDestroy:...指令分类 组件:用于构建UI组件,继承于Directive类 属性指令:用于改变组件的外观或行为 ngClass ngStyle 结构指令:用于动态添加或删除DOM元素来改变DOM布局 ngIf ngFor...,主动获取子组件的数据方法(父组件中使用) 4....Constructor ngOnInit 的本质区别 Constructor 在ES6中 constructor表示构造函数,使用在class中。来初始化操作。...使用场景 constructor 中不适合进行任何组件通信类似的复杂操作,一般在constructor中进行一些简单的初始化操作,比如依赖注入、变量初始化等。

10.9K120

Angular 从入坑到挖坑 - 组件食用指南

模板表达式的变量来源 模板本身的变量 指令的上下文变量 组件的成员信息(属性 or 方法) 在使用模板表达式时,如果变量名在多个来源中都存在的话,模板变量是最优先的,其次是指令的上下文变量,最后是组件的成员...="expr">NgIf 结构型指令 当 expr 属性为 true 时,这个元素则会显示在页面上,当属性值为 false 时,则不显示该元素 ngIf 指令并不是通过使用 css 样式来隐藏元素的...,当值为 false 时,这些元素会从 dom 中被销毁,并且所有监听该 dom 元素的事件会被取消,当重新显示该元素时,会重新执行初始化的过程 与销毁元素不同,对于隐藏的元素来说,所有的元素监听事件还会执行监听的...4.4.3、父组件获取子组件信息 使用 @ViewChild 装饰器获取 在子组件上定义一个模板引用变量 父组件内容: 1、使用 @ViewChild 装饰器获取子组件数据...的引用,然后使用 @ViewChild 装饰器来接收子组件的 dom 信息,从而获取到子组件的数据或方法 // 引入 ViewChild import { Component, OnInit,

15.8K30

Angular开发实践(四):组件之间的交互

而通过使用 OnChanges 生命周期钩子接口的 ngOnChanges() 方法(当组件通过@Input装饰器显式指定的那些变量的值变化时调用)就可以实现同时监视多个输入属性值的变化。...父组件与子组件通过本地变量(模板变量)互动 父组件不能使用数据绑定来读取子组件的属性或调用子组件的方法。...如果父组件的类需要读取子组件的属性值或调用子组件的方法,就不能使用本地变量方法。 当父组件类需要这种访问时,可以把子组件作为 ViewChild,注入到父组件里面。...在上面定义好的子组件父组件,我们可以看到: 父组件在组件类中通过@ViewChild()获取到子组件的实例,然后就可以在模板或者组件类中通过该实例获取子组件的属性: <!...); // 打印结果:子组件DemoChildComponent初始化完成!

3.4K80

Angular核心-父子间组件传递数据-重难点

(达教育学习笔记)仅供学习交流 Angular核心-父子间组件传递-重难点 Angular核心-父子间组件传递数据-重难点方向一:父=》子传递数据方向二:子=》父父子组件传递数据的简便方法:...Angular核心-父子间组件传递数据-重难点 方向一:父=》子传递数据 方向二:子=》父 父子组件传递数据的简便方法: Vue.jsAngular中的父子间消息传递原理一样,都可以用口诀:“Props...> 在ts文件里: @ViewChild('c0',{static:true})//这个c0表示组件c1 private c0: any;//这个c0是自己起的名字,与组件c0绑定 @ViewChild...('c1',{static:true}) private c1: any; 提示:ViewChild装饰器用于将子组件识别符与某个属性关联起来,第一个参数必须是已经存在的子组件识别符(不带#),第二个参数...static指定该组件是否为“静态组件”—不会有时有时无的组件(比如ngIf,ngFor) 注意: 通过“ViewChild”-视图组件方式,父组件可以获得任意子组件中的数据,在一定程度上违反了“最少知识法则

1.2K20

Angular学习笔记(一)

Angular 使用依赖注入来提供新组件以及组件所需的服务。 2. 模板与数据绑定 绑定的类型可以根据数据流的方向分成三类: 从数据源到视图、从视图到数据源以及双向的从视图到数据源再到视图。...green'"> 内置属性型指令 NgClass - 添加或移除一组CSS类 NgStyle - 添加或移除一组CSS样式 NgModel - 双向绑定到HTML表单元素 内置结构型指令 NgIf...ngOnInit() 在 Angular 第一次显示数据绑定设置指令/组件的输入属性之后,初始化指令/组件。 在第一轮 ngOnChanges() 完成之后调用,只调用一次。...ngAfterContentInit() 每次 ngDoCheck() 之后调用。 只适合组件。 ngAfterViewInit() 初始化完组件视图及其子视图之后调用。...ngAfterViewChecked() 每次做完组件视图子视图的变更检测之后调用。 ngAfterViewInit() 每次 ngAfterContentChecked() 之后调用。

3.3K20

Angular8稳定版修改概述

Bazel将提供以下优势: 更快的构建时间(对于第一次构建需要时间,但并发构建将更快),Angular已经在使用它,现在CI在7.5分钟完成,而不是在Bazel之前的60分钟。...angular使用builders进行主要操作:serve ,build ,test ,linte2e 。您可以在angular.json文件中查看使用过的构建器。 ......配置ViewChild / ContentChild查询的时间 使用此功能时,必须提供静态标志以定义何时需要解析ViewChildContentChild实例。...使用此功能时,必须提供静态标志以定义何时需要解析ViewChildContentChild实例。...需要注意的是,设置static: true将不允许您从动态模板分辨率(例如*ngIf)获得结果。 添加了原理图支持以将现有代码迁移到此语法,因为将使用此语法Ivy 。

4.5K20

怎样在你的网页中嵌入展示3D奎爷模型(可360度观看)

图形,而无需使用插件,该API 可以在HTML5 元素中使用。...BABYLON.Engine(canvas, true); 创建场景: const scene = new BABYLON.Scene(engine); 然后我需要从服务器中拿到模型url路径,然后将路径分割为模型地址模型名称以便加载使用...: <button class="fullsModelBtn" (click)="fullscreenButton()...() 中,在Angular的生命周期中,<em>ngAfterViewInit</em>() 当 Angular <em>初始化</em>完组件视图及其子视图或包含该指令的视图之后调用。...因为在 ngOnInit() <em>初始化</em>数据时我请求了后端获取报告的接口,并将返回的数据<em>初始化</em>到页面。业务需要我根据返回数据中 assetType 字段来判定前端展示效果,是展示模型还是普通图片。

32150
领券