angular中进行dom操作

51 阅读1分钟
使用装饰器@viewChild声明一个变量绑定相应子组件或dom元素
  • 如果绑定的是子组件,就是会获取到一个子组件实列
  • 如果绑定的是元素,就是获取一个封装的ElementRef类
    • 通过nativeElement包装属性直接访问真实dom元素
    • 生命周期管理(当组件销毁时,就会清除elementRef,避免内存泄漏)
    • 类型安全,无需要手动定义类型声明
    • 也是angular抽象层一部分
  • 定义时的配置项(static)
    • static:true表示静态查询,会在组件初始化后立即尝试获取对应的子组件或元素。适合静态组件结构,不会随着条件变化而动态加载或移除
      • 组件初始化完成后(ngOnInit时,angular9之后版本才可),就可以访问相应元素
      • 可能导致访问失败情况:
        • 查询的元素是动态加载的
        • 查询的元素使用了ngIf指令
        • 显然ngOnInit之前的钩子是访问不了,例如construct中使用
        • 其他异步行为
    • static:false表示动态查询,Angular 视图初始化后,ngAfterViewInit 生命周期钩子触发后进行查询。
      • 在ngAfterView钩子里面就可以访问相应元素