Angular: DOCUMENT

不用原生的 document,是因为不利于后端渲染,所以避免使用原生浏览器的对象

typescript 复制代码
import { DOCUMENT } from '@angular/common';
import { Directive, Inject, Input, OnChanges, Output, Renderer2, SimpleChanges } from '@angular/core';

@Directive({
  selector: '[appClickoutside]'
})
export class ClickoutsideDirective implements OnChanges{
  @Input() bindFlag = false;  // 是否监听 document
  private handleClick: ()=> void;
  
  constructor(
    @Inject(DOCUMENT) private doc: Document,
    private rd: Renderer2
    ) {
      
    }

  ngOnChanges(changes: SimpleChanges): void {
    if (changes['bindFlag'] && !changes['bindFlag'].firstChange) {
      if (this.bindFlag) {
        this.handleClick = this.rd.listen(this.doc, 'click', evt=> {
          // 点击事件的操作
        })
      }else {
        this.handleClick(); // 解绑
      }
    }
  }
  getDocument() {
    // 获取 document 的属性
    this.doc.documentElement.clientWidth;
    this.doc.body.offsetWidth;
    this.doc.documentElement.clientHeight;
    this.doc.body.offsetHeight;
    ...
    // 设置 document 的属性
    this.doc.documentElement.scrollTop = 0;
    ...
  }
}
相关推荐
申阳6 分钟前
Day 22:SpringBoot4 + Tauri 2.0(VUE) 登录功能前后端联调
前端·后端·程序员
晴殇i16 分钟前
性能飞跃!这几个现代浏览器API让页面加载速度提升至90+
前端·javascript·面试
孟祥_成都17 分钟前
nest.js / hono.js 一起学!开发前必备!
前端·node.js
Hilaku19 分钟前
检测开发者工具是否打开?这几种方法让黑客无处遁形🤣
前端·javascript·前端框架
qq_3168377521 分钟前
uniapp 缓存指定接口的响应,在无网络时使用缓存数据
前端·uni-app
GIS开发特训营22 分钟前
2025年华中农业大学暑期实训优秀作品(4):智慧煤仓监控系统平台——重塑煤炭仓储管理新模式
前端·vue.js·信息可视化
腾讯云云开发26 分钟前
【CloudBase MCP 升级福利】你的AI开发搭子已进化!晒出AI Coding项目领取周边礼品
前端·后端·小程序·云开发
Web极客码28 分钟前
如何在WordPress网站中添加Cookie弹窗
前端·安全·github·wordpress
这儿有一堆花28 分钟前
从 Markdown 到 HTML 的正确构建路径
前端·html
Cherry的跨界思维32 分钟前
5、Python长图拼接终极指南:Pillow/OpenCV/ImageMagick三方案
javascript·python·opencv·webpack·django·pillow·pygame